要实现的功能:本函数是由树状图生成相应的XML文件,当树状图中插入一个节点时,动态的在XML中写入一个节点,该节点可能还要继续插入子节点。我认为本函数关键就是处理两个问题:1、遍历树状图,找到要插入子节点的父节点;2、在找到的父节点下写入子节点。- <book>
-  <note>
    小说 
     -<adult note ID="null" country="null" owner="null" name="null">飘 
         <18teens note>梦想<18teens note>
      </adult note> 
   </note>
   <children note>小红帽</children note>
  </book>存在的问题:1、要得到节点<note>的值“小说”应该用哪个函数?要得到“飘”这个字符要用哪个函数?
            2、如何实现这种XML 结构的遍历
           谢谢大家的不吝赐教           
注意:我的函数如下,当我往<note>下面插入两个节点时,有一个结点总是插到<note>的同一级。如上所示,小红帽本来是要插到与飘同一级却插到了小说同一级与定义的成员变量:MSXML::IXMLDOMNodePtr  specifiedNode ;
MSXML::IXMLDOMDocumentPtr pXmlDoc;
CString engstrtext;
TCHAR m_pXmlName[25];
插入函数:
void CMyProject::OnInsertitem() 
{       //创建DOMDocument对象
     HRESULT hrt = pXmlDoc.CreateInstance(__uuidof(MSXML::DOMDocument));
if(!SUCCEEDED(hrt)) 

MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"); 
}

//加载文件
variant_t vr;
vr = pXmlDoc->load(m_pXmlName); if( (bool)vr == FALSE)   
{
MessageBox("load xml error!");
} //获得树状图中要插入子节点的父节点的名称
HTREEITEM hItem=((CMainFrame*)AfxGetMainWnd())->m_wndTree.GetSelectedItem( );
CString SelDadTxt=((CMainFrame*)AfxGetMainWnd())->m_wndTree.GetItemText(hItem);

        
        quit = FALSE;   //quit为循环遍历树状图的标识 specifiedNode = pXmlDoc->documentElement;        DisplayChildren(specifiedNode);    //DisplayChildren()为循环遍历XML函数,specifiedNode为遍历的起始节点
}
    
//DisplayChildren()为循环遍历XML函数
void CMyProject::DisplayChildren(MSXML::IXMLDOMNodePtr pParent)
{
DisplayChild(pParent);
MSXML::IXMLDOMNodePtr pChild; for (pChild = pParent->firstChild;NULL != pChild;pChild = pChild->nextSibling)
{   
if(quit) break ;
DisplayChildren(pChild);
}
}//DisplayChild()为找到要插入的父节点并且插入子节点函数
void CMyProject::DisplayChild(MSXML::IXMLDOMNodePtr pChild)
{
 if (NODE_TEXT == pChild->nodeType)
 {
 }
 else {  CString strName;
    
    strName=(char *)pChild->GetnodeName();
 if (!strcmp(strName,((CMainFrame*)AfxGetMainWnd())->SelectDadText)) //当XML中某个节点的节点名与树状图中所选中的节点名相同时,便往该XML的节点下插入子节点并且写入相应的属性值
{
 MSXML::IXMLDOMElementPtr  pSTKobjElement ;
 TCHAR haha[25];
lstrcpy(haha, engstrtext);
pXmlDoc->raw_createElement((_bstr_t)(char*)haha, &pSTKobjElement);
pSTKobjElement->Puttext(SelectNodeName);//节点值
pSTKobjElement->setAttribute("ID","null");//属性名,属性值
pSTKobjElement->setAttribute("country","null");
pSTKobjElement->setAttribute("shuxing1","null");
pSTKobjElement->setAttribute("shuxing2","null");
pChild->appendChild(pSTKobjElement);
pXmlDoc->save(m_pXmlName);
quit=true;
 }
 }}