2012-03-21 93 views
0

从“msxml3.dll”库中使用MSXML2函数时,我试图复制XML文档中的部分,但它不像我期望的那样工作。MSXML node.clode方法无法按预期方式工作

这里是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>中的所有节点。有什么我失踪?

+0

你能提供异常消息? – Seb 2012-03-21 13:31:03

+0

我错了。上面显示的代码实际上并没有引发异常(这是大段内容的摘录)。它只是不起作用,XML本身没有改变。我已经从问题中删除了“例外”文本。 – 2012-03-22 07:45:50

回答

1

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

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

相关问题