Нужна помощь в остановке 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="".