Нужна помощь в остановке MSXML от добавления пространств имен

Я использую 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 ответа

Решение

Я понял.

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

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

До:

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

Сейчас:

pNode->createNode(NODE_ELEMENT, name, "namespace");

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

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

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

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

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

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

Другие вопросы по тегам