2010-06-25 56 views
2

使用Delphi 2009,我試圖獲得一個聲明的名稱空間前綴以應用於我創建的IXMLDocument中的文檔元素。一旦創建了文檔元素,我可以用一個前綴聲明一個名稱空間,但它不會應用於文檔元素,而且我似乎也無法更改文檔元素的前綴。如果我使用doc.CreateElement(nodename,namespaceURI)創建文檔元素,它將指定的URI添加爲文檔的默認命名空間,這不是我想要的。我正在創建的這個文檔將被添加到已經有一個默認命名空間的另一個文檔中。如何在Delphi中設置文檔元素的前綴

Result := NewXMLDocument; 
    eleDoc := Result.CreateElement(TAG_IH_IMPORT, NS_HISTORIAN); 
    eleDoc.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN); 

其中TAG_IH_IMPORT和NS_HISTORIAN是字符串常量,eleDoc:IXMLNode和FNamespacePrefix:字符串。

這樣做的輸出看起來像:

<Import xmlns="uri" xmlns:h="uri" /> 

我真的想要得到的是「H:」應用到導入標籤。有什麼建議麼?

謝謝。

回答

3

您可以指定的時間)的命名空間前綴調用的createElement(即:

Result := NewXMLDocument; 
eleDoc := Result.CreateElement(FNamespacePrefix + ':' + TAG_IH_IMPORT, NS_HISTORIAN); 
eleDoc.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN); 
Result.DocumentElement := eleDoc; 

或者,您可以創建一個臨時文件節點,聲明前綴的子節點,添加一個子節點到它,然後將其分配爲新的文檔節點。例如:

Result := NewXMLDocument; 
eleTemp := Result.CreateElement('temp', ''); 
eleTemp.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN); 
eleDoc := eleTemp.AddChild(TAG_IH_IMPORT, NS_HISTORIAN); 
Result.DocumentElement := eleDoc; 
+0

謝謝,雷米。我已經實施了第二個解決方案,但還沒有回到這裏發佈。你的第一個建議更清晰,我不知道爲什麼我沒有嘗試它,除非我沒有想到它會起作用。 – RJCookeSE 2010-06-29 11:19:46

相關問題