MS Dynamics NAV XML Namespace устанавливается автоматически - PullRequest
1 голос
/ 21 марта 2012

Я создаю новый XML-файл из таблицы.Проблема в том, что я не хочу, чтобы у дочерних узлов корневого узла был атрибут xmlns.Это происходит автоматически, и это неправильно.Если у меня есть атрибут в корневом элементе, независимо от того, как он туда попадает, он помещает его в свои дочерние узлы.Как мне от него избавиться?

A

Локальные имена Имя Тип данных Подтип Длина

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 CODE

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>

Ответы [ 3 ]

0 голосов
/ 27 марта 2012

Спасибо за ответ. Это правда, что от этого никуда не деться! Но я нашел обходной путь, чтобы разрешить хотя бы проверку файла. Добавление пространства имен по умолчанию из корня позволяет документу быть действительным.

<?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 голосов
/ 25 сентября 2016

при использовании метода createNode используйте namespaceURI из родительского узла.вероятно, должно работать, если вы измените на L_XMLOrderHeader: = L_DataXML.createNode (1, 'ORDER_HEADER', L_DataXML.namespaceURI);

0 голосов
/ 22 марта 2012

У меня тоже была эта проблема некоторое время назад.К сожалению, вы не можете предотвратить это с помощью XMLDOM.Мой обходной путь заключался в создании XML-файла с ошибкой, загрузке его в переменную большого текста и циклическом циклическом просмотре при стирании xmlns = ""

Code:

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

Надеюсь, это поможет

...