2012-03-21 90 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

相關問題