MSXML метод node.clode не работает должным образом - PullRequest
0 голосов
/ 21 марта 2012

Используя функции MSXML2 из библиотеки "msxml3.dll", я пытаюсь дублировать разделы в документе XML, но он не работает, как ожидалось.

Вот XML:

<result>
     <Target>
          <Point>
            <pos dimension="2">60.384005 5.333862</pos>
          </Point>
      </Target>
</result>

Я хочу добавить несколько разделов.Поэтому я хочу взять узел, продублировать его и поместить под существующий узел <Target>.Я почти убежден, что должен использовать метод Clone, но, похоже, он не работает.Код C ++:

    typedef MSXML2::IXMLDOMNodePtr XmlNode;  

    XmlNode pNode = pXMLRequest->selectSingleNode("//result");
if(pNode==NULL)
    { m_szErrorText =  m_szErrorText + _T(" 'result' node not found");return FALSE;}    

    XmlNode pTargetNode = pNode->selectSingleNode("Target");
    XmlNode pNewTargetNode  = pTargetNode->cloneNode(true);
    pNode->appendChild(pNewTargetNode);

Но когда я запускаю этот код, с документом XML ничего не происходит.И когда я проверяю текст XML в pNewTargetNode, я вижу, что это только '<result>', который является просто именем узла, хотя я ожидаю, что он будет содержать все узлы в <Target>...</Target>.Что-то мне не хватает?

1 Ответ

1 голос
/ 22 марта 2012

Я использовал неправильный вид «правда».Если я заменю

XmlNode pNewTargetNode  = pTargetNode->cloneNode(true);

на

XmlNode pNewTargetNode  = pTargetNode->cloneNode(VARIANT_TRUE);

, все будет работать нормально.Я уже думал об этом и использовал TRUE вместо true, но это тоже не работает.Поэтому при использовании библиотеки msxml всегда используйте VARIANT_BOOL, VARIANT_FALSE и VARIANT_TRUE.

Раймонд Чен объясняет, почему существует так много вариантов: http://blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx

...