MSXML node.clode方法无法按预期工作

时间:2012-03-21 11:26:42

标签: c++ xml msxml

使用“msxml3.dll”库中的MSXML2函数,我正在尝试复制XML文档中的部分,但它不能像我预期的那样工作。

这是XML:

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

我想要的是添加多个部分。所以我想获取节点,复制它并将其放在现有的<Target>节点下。我几乎确信我应该使用克隆方法,但它似乎不起作用。 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文档没有任何反应。当我检查pNewTargetNode中的XML文本时,我看到它只是'<result>',它只是节点的名称而我希望它包含<Target>...</Target>中的所有节点。有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

我使用了错误的'真实'。 如果我更换

XmlNode pNewTargetNode  = pTargetNode->cloneNode(true);

XmlNode pNewTargetNode  = pTargetNode->cloneNode(VARIANT_TRUE);

它工作正常。我已经考虑过这个并使用TRUE而不是true,但这也不起作用。 因此,当使用msxml库时,请使用VARIANT_BOOL,VARIANT_FALSE和VARIANT_TRUE。

Raymond Chen解释了为什么会有这么多变化: http://blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx