2011-08-10 85 views
0

我在从XML中删除节点时遇到了一些问题。如何在XML中删除节点及其子节点

这里是我的XML架构,

<?xml version="1.0" encoding="ISO-8859-1"?> 
<file> 
    <header Description="Lovely Tool"></header> 

    <ToolPath>C:\MyDocs\MyTool\</ToolPath> 

    <ToolDetails> 
    <Name>XML Tool</Name> 
    <Description>XML parser</Description> 
    <Comments>Good Tool for XML</Comments> 
    </ToolDetails> 
</file> 

我想删除节点ToolDetails及其childs,我试图像这样使用MSXML,但其没有工作,

这里是我的代码

CString childName; 
    MSXML2::IXMLDOMNodePtr childPtr = NULL; 
    MSXML2::IXMLDOMNodePtr delNode = NULL; 
    int i=0; 
    MSXML2::IXMLDOMNodeListPtr pChildNodeListPtr = NULL; 

delNode = m_pRoot->GetchildNodes()->Getitem(index+2);//m_pRoot is the root ptr 
childName=(char*)m_ptrDataBlock->nodeName; 
HRESULT hr = m_pRoot->removeChild(delNode); 

回答

1

Getitem(index+2)将只返回句柄index + 2th项目。

删除节点还需要通过调用 Getitem(index)->detach()

+0

没有,它没有被清除,以分离的项目,我想UR方式:( – Naruto

+0

尝试寻找这里:http://read.pudn.com/ downloads108 /源码/窗/对话框/ 443834 /的3rdParty/XmlNodeWrapper.cpp __ HTM 第h ... –

+0

我试图像这样“为(I = 0;我 GETLENGTH();我++) \t { \t \t childPtr = pChildNodeListPtr-> item [i] .Detach(); \t \t \t childName =(char *)childPtr-> nodeName; \t \t childName =(char *)childPtr-> text; \t \t hr = childPtr-> GetparentNode() - emoveChild(childPtr); \t \t“我得到HR NULL :( – Naruto