【问题标题】:MS Dynamics NAV XML Namespace is set automaticallyMS Dynamics NAV XML 命名空间是自动设置的
【发布时间】:2012-04-06 05:31:38
【问题描述】:

我正在从一个表中创建一个新的 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>

【问题讨论】:

标签: xml dom dynamics-nav


【解决方案1】:

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

希望对你有帮助

【讨论】:

    【解决方案2】:

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

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

    干杯

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多