1

我正在从表中创建一个新的 XML 文件。问题是我不希望根节点的子节点具有属性 xmlns。这会自动发生并且不正确。如果我在根元素上有该属性,那么无论它如何到达那里,它都会将它放在它的子节点中。我怎样才能摆脱它?

一个

本地名称 数据类型 子类型 长度

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>
4

3 回答 3

0

感谢你的回答。这是真的,没有办法摆脱它!但我找到了一种解决方法,至少允许文件的验证。从根添加默认命名空间允许文档有效。

<?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,它就不会再抱怨了。

干杯

于 2012-03-26T21:46:36.987 回答
0

我前段时间也有这个问题。不幸的是,使用 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

希望能帮助到你

于 2012-03-22T13:05:07.047 回答
0

当使用 createNode 方法时,使用父节点的 namespaceURI。如果您更改为 L_XMLOrderHeader := L_DataXML.createNode(1,'ORDER_HEADER',L_DataXML.namespaceURI); 可能应该可以工作

于 2016-09-25T14:45:20.863 回答