c++ - MSXML node.clode 方法未按预期工作

标签 c++ xml msxml

使用“msxml3.dll”库中的 MSXML2 函数,我试图复制 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 文档没有任何变化。当我检查 pNewTargetNode 中的 XML 文本时,我看到它是 '<result>' only 这只是节点的名称 虽然我希望它包含 <Target>...</Target> 中的所有节点.有什么我想念的吗?

最佳答案

我用错了“真”。 如果我更换

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

关于c++ - MSXML node.clode 方法未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9803684/

相关文章:

java - Android:将语言从英语更改为印地语和泰卢固语

c++ - Visual C++ 中的容错 DLL 使用

c++ - 正则表达式替换两个匹配项之间的所有匹配项

c++ - main()::__lambda1 不是 std::_Tuple_impl<1ul, main()::__lambda1> 的可访问基类

具有非平凡类型的 C++ 原子?

Windows XP 上的 Vb6 http post 请求

c++ - 单个 XMLHTTPRequest 对象发出多个请求

c++ - SFINAE 尝试使用 bool 给出编译器错误 : "template argument ‘T::value’ involves template parameter"

sql-server - 如何使用 SQL Server 2016 删除 XML 子节点

xml - ASP.NET MVC4 WebAPI 和发布 XML 数据