2012-03-21 68 views
1

我從表格中創建一個新的XML文件。問題是我不希望根節點的子節點具有屬性xmlns。這會自動發生,並且不正確。如果我在根元素上有屬性,則無論它如何到達,都會將其放入其子節點中。我怎樣才能擺脫它?MS動態導航XML名稱空間自動設置

一個

當地人 名數據類型子類型長度

L_DataXML Automation 'Microsoft XML, v6.0'.DOMDocument60 
L_XMLElement Automation 'Microsoft XML, v6.0'.IXMLDOMElement 
L_XMLAttribute Automation 'Microsoft XML, v6.0'.IXMLDOMAttribute 
L_XMLNode Automation 'Microsoft XML, v6.0'.IXMLDOMNode 
L_XMLOrderHeader Automation 'Microsoft XML, v6.0'.IXMLDOMNode 
L_XMLOrderItemList Automation 'Microsoft XML, v6.0'.IXMLDOMNode 
L_XMLOrderSummary Automation 'Microsoft XML, v6.0'.IXMLDOMNode 

C/AL代碼

L_DataXML.loadXML('<ORDER xmlns="test"/>'); 

L_XMLNode := L_DataXML.documentElement; 

L_XMLOrderHeader := L_DataXML.createNode(1,'ORDER_HEADER',''); 
L_XMLNode.appendChild(L_XMLOrderHeader); 

XML

<?xml version="1.0"?> 
<ORDER xmlns="test"> 
    <ORDER_HEADER xmlns=""/> 
</ORDER> 
+0

請注意,[Microsoft有關於此確切問題的知識庫文章](http://support.microsoft.com/kb/828928)。 – eykanal 2012-11-07 15:09:23

回答

0

我也是前一陣子有這個問題。 Unforunatley,你無法阻止使用XMLDOM。我的解決方法是創建一個錯誤的XML文件,將其加載到通過它bigtext變量和循環,而消除的xmlns =「」

代碼:

XMLFile.TEXTMODE(FALSE); 
XMLFile.OPEN(SavePath); 
XMLFile.CREATEINSTREAM(InStream); 
InputText.READ(InStream); 
XMLFile.CLOSE; 

TextToFind := 'xmlns=""'; 
TextPos := InputText.TEXTPOS(TextToFind); 
WHILE TextPos <> 0 DO BEGIN 
    InputText.GETSUBTEXT(SubText, 1, TextPos - 1); 
    OutputText.ADDTEXT(SubText); 
    InputText.GETSUBTEXT(InputText, TextPos + STRLEN(TextToFind)); 
    TextPos := InputText.TEXTPOS(TextToFind); 
END; 
OutputText.ADDTEXT(InputText); 

XMLFile.TEXTMODE(FALSE); 
XMLFile.CREATE(SavePath); 
XMLFile.CREATEOUTSTREAM(OutStream); 
OutputText.WRITE(OutStream); 
XMLFile.CLOSE; 

變量

Name DataType Subtype Length 
XMLFile File   
InStream InStream   
OutStream OutStream  
InputText BigText  
OutputText BigText  
SubText BigText  
TextPos Integer  
TextToFind Text  30 
SavePath Text  1024 

希望它有幫助

0

感謝您的答案。這是真的沒有辦法擺脫它!但我找到了一個解決方法,至少允許文件的valiadion。從根中添加默認名稱空間允許文檔有效。

<?xml version="1.0"?> 
<ORDER xmlns="test"> 
    <ORDER_HEADER xmlns="test"/> 
</ORDER> 

其別人可能會遇到的另一個問題是第二個命名空間

<?xml version="1.0"?> 
<ORDER xmlns="test" xmlns:second="second-test"> 
    <ORDER_HEADER xmlns="test"> 
      <second:TAG/> 
    </ORDER_HEADER> 
</ORDER> 

首先它會導致一個錯誤,因爲它沒有找到第二個命名空間。只需將名稱空間URI添加到AddFunciton,它就不會再抱怨了。

乾杯

0

當使用createNode方法時,從父節點使用namespaceURI。 可能應該工作,如果你想更改爲 L_XMLOrderHeader:= L_DataXML.createNode(1,'ORDER_HEADER',L_DataXML.namespaceURI);