Нужна помощь в остановке MSXML от добавления пространств имен - PullRequest
1 голос
/ 17 января 2010

Я использую MSXML 4 для генерации следующей строки xml:

<?xml version="1.0">
<Parent_Element xmlns="http://1">
    <Child_One>
        <Child_Two xmlns="http://2">
            <Child_Three>
            </Child_Three>
        </Child_Two>
    </Child_One>
</Parent>

Однако вывод из моего IXMLDOMDocument2Ptr всегда включает пространство имен для Child_Three:

<?xml version="1.0">
<Parent_Element xmlns="http://1">
    <Child_One>
        <Child_Two xmlns="http://2">
            <Child_Three xmlns="http://1">
            </Child_Three>
        </Child_Two>
    </Child_One>
</Parent>

Насколько я понимаю, такое поведение является частью стандарта XML, но система, получающая xml, отклоняет его, если присутствует дополнительное пространство имен. Он также отклонит xml, если есть пустое пространство имен (т.е. xmlns = "").

Есть ли в MSXML какой-либо способ избежать добавления или удаления пространства имен для Child_Three?

Ответы [ 3 ]

2 голосов
/ 17 января 2010

Я понял это.

1) У меня был дефект, когда вместо родительского узла использовалось пространство имен документа.

2) С исправлением из # 1 я получил пустое пространство имен (xmlns = ""). Чтобы обдумать это, я должен был установить пространство имен при создании узла. До того, как я создал узел, а затем добавил атрибут xmlns в отдельном вызове.

До:

pNode->createNode(NODE_ELEMENT, name, "");
pAttrib = pNode->createAttribute("xmlns")
pAttrib->put_NodeValue(namespace)

Сейчас:

pNode->createNode(NODE_ELEMENT, name, "namespace");
0 голосов
/ 18 мая 2017

Я нашел решение этой проблемы. Проблема в том, что MSXML не может обрабатывать нарушенные пространства имен ...

Недавно у меня была ситуация, когда в теге самого высокого уровня был xmlns = "http: // ...", но это было неправильно. Это должно было быть: xmlns: xsd = "http: // ...".

Как только я исправил это в самом верхнем теге xml, я мог вставлять теги xml в документы, не видя xmlns = "" везде.

Интересно, что когда вы пишете XML-документ с самого начала, создаете иерархию тегов, вы не получите теги xmlns = "".

0 голосов
/ 17 января 2010

MSXML будет представлять именно те пространства имен, которые вы указали для его представления.

Из вашей цитаты это выглядит так, как будто вы создали узел child3 с пространством имен http://1,, и вам необходимо создать его с пространством имен http://2.

...