Вопрос по работе с MSXML
От: _agg  
Дата: 30.12.16 09:12
Оценка:
Привет всем. Возник вопрос по работе MSXML, имеются узлы в документе вот такого вида:
<v:userDefs>
    <v:ud v:nameU="A" v:prompt="" v:val="AV"/>
    <v:ud v:nameU="B" v:prompt="" v:val="BV"/>
    <v:ud v:nameU="C" v:prompt="" v:val="CV"/>
</v:userDefs>


Нашел узел c v:nameU="A" тут проблем не возникло, возникла проблема с добавлением нового узла с атрибутами на выходе должен получиться вот такой XML:
<v:userDefs>
    <v:ud v:nameU="A" v:prompt="" v:val="AV"/>
    <v:ud v:nameU="B" v:prompt="" v:val="BV"/>
    <v:ud v:nameU="C" v:prompt="" v:val="CV"/>
    <v:ud v:nameU="D" v:prompt="" v:val="DV"/>
</v:userDefs>


Пытаюсь добавить вот так:
IXMLDOMNodePtr new_node= doc->createNode(CComVariant(NODE_ELEMENT), bstr_t("v:ud"), bstr_t(""));

1. Не дает создавать узел с именем "v:ud" Как создать с именем "v:ud"?
2. Если даже обойтись без ":" создаю атрибуты:

auto new_attr1=doc->createAttribute(L"nameU");
auto new_attr2 = doc->createAttribute(L"prompt");
auto new_attr3 = doc->createAttribute(L"val");
new_attr1->Putvalue(variant_t(L"\"D\""));
new_attr2->Putvalue(variant_t(L""));
new_attr3->Putvalue("\"DV\"");


3. Непонятно как добавить атрибуты в new_node?
4. Как создать с помощью MSXML узел вида : "<v:ud v:nameU="D" v:prompt="" v:val="DV"/>" ?
Заранее благодарен ...
Отредактировано 30.12.2016 9:43 _agg . Предыдущая версия . Еще …
Отредактировано 30.12.2016 9:43 _agg . Предыдущая версия .
Re: Вопрос по работе с MSXML
От: α Российская Империя  
Дата: 30.12.16 09:54
Оценка:
Здравствуйте, _agg, Вы писали:

_>4. Как создать с помощью MSXML узел вида : "<v:ud v:nameU="D" v:prompt="" v:val="DV"/>" ?


createNode(NODE_ELEMENT, tagName, namespaceURI)
Re: Вопрос по работе с MSXML
От: Igore Россия  
Дата: 30.12.16 09:54
Оценка:
Здравствуйте, _agg, Вы писали:

_>Пытаюсь добавить вот так:

_>
_>IXMLDOMNodePtr new_node= doc->createNode(CComVariant(NODE_ELEMENT), bstr_t("v:ud"), bstr_t(""));
_>

_>1. Не дает создавать узел с именем "v:ud" Как создать с именем "v:ud"?
Ты namespaceURI последним параметром не передаешь. Запись в xml, X:Y означает что X это пространство имен, определенное как xmlns:X=test. Так же в xml пространство имен атрибутов обычно равно пространству имен ноды, поэтому у атрибутов очень редко есть префикс пространства имен, в твоем случае по нормальному xml будет выглядеть так <v:ud nameU="A" prompt="" val="AV" xmlns:v="test"/>

_>3. Непонятно как добавить атрибуты в new_node?

_>4. Как создать с помощью MSXML узел вида : "<v:ud v:nameU="D" v:prompt="" v:val="DV"/>" ?
_>Заранее благодарен ...
Посмотри примеры https://msdn.microsoft.com/en-us/library/ms757901(v=vs.85).aspx по использованию методов createNode, и т.д.
Re: Вопрос по работе с MSXML
От: bnk СССР http://unmanagedvisio.com/
Дата: 02.01.17 11:59
Оценка:
Здравствуйте, _agg, Вы писали:

_>Привет всем. Возник вопрос по работе MSXML, имеются узлы в документе вот такого вида:

_>
_><v:userDefs>
_>    <v:ud v:nameU="A" v:prompt="" v:val="AV"/>
_>    <v:ud v:nameU="B" v:prompt="" v:val="BV"/>
_>    <v:ud v:nameU="C" v:prompt="" v:val="CV"/>
_></v:userDefs>
_>

Похоже на экспорт из Visio в SVG. На плюсах?! Может я тебя знаю?!

По сути.

_>IXMLDOMNodePtr new_node= doc->createNode(CComVariant(NODE_ELEMENT), bstr_t("v:ud"), bstr_t(""));


Попробуй указать правильный (непустой) неймспейс. Типа так:
doc->createNode(CComVariant(NODE_ELEMENT), bstr_t("ud"), bstr_t("http://schemas.microsoft.com/visio/2003/SVGExtensions/"))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.