[xml][tree]xml生成tree有关问题
[xml][tree]xml生成tree问题
mfc单窗口应用程序
一个button 一个tree 控件其他没有了,写的代码如下:
希望实现点击按钮后把 xml文档添加到树中:代码如下但老是报错
void CNewxmltreeDlg::OnButton1()
{
// TODO: Add your control notification handler code here
LoadXmlToTree( "f:\he.xml ",GetDlgItem(IDC_pTree));
}
const char ROOT[] = "//China ";
bool LoadXmlToTree(LPTSTR xmlFileName,CTreeCtrl *pTree)
{
CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pXMLDom;
HRESULT hr= pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument30));
if ( FAILED(hr) )
{
return FALSE;
}
pXMLDom-> async = VARIANT_FALSE; // default - true,
// 加载xml文件
if(pXMLDom-> load(_variant_t(xmlFileName)) != VARIANT_TRUE)
{
return FALSE;
}
MSXML2::IXMLDOMNodePtr pRootNode = pXMLDom-> selectSingleNode(ROOT); // 取得根节点
if(pRootNode == NULL) return FALSE;
LPTSTR sRoot = _com_util::ConvertBSTRToString(pRootNode-> GetnodeName());
HTREEITEM root = pTree-> InsertItem(_T(sRoot)); // 加载根节点到树
XmlNodeToTreeNode(root,pRootNode,pTree); // 该函数在下面
pXMLDom = NULL;
pRootNode = NULL;
CoUninitialize();
return TRUE;
}
void XmlNodeToTreeNode(HTREEITEM parentItem, MSXML2::IXMLDOMNodePtr pXmlNode,CTreeCtrl *pTree)
{
if( !wcscmp(pXmlNode-> GetnodeTypeString(),L "text ") ) //NODE类型的含义请参考MSDN
return;
MSXML2::IXMLDOMNodeListPtr pXMLNodeList = pXmlNode-> GetchildNodes();
long count = pXMLNodeList-> Getlength(); // 子节点个数
if(count==0)
{ // 没有子节点,则设置父节点名
LPTSTR sNode = _com_util::ConvertBSTRToString(pXmlNode-> GetnodeName());
pTree-> SetItemText(parentItem,sNode);
return;
}
for(int i=0; i <count; i++)
{
LPTSTR sVal= " ";
MSXML2::IXMLDOMNodePtr childNode = pXMLNodeList-> item[i];
HTREEITEM subItem;
if( !wcscmp(childNode-> GetnodeTypeString(),L "text ") )
mfc单窗口应用程序
一个button 一个tree 控件其他没有了,写的代码如下:
希望实现点击按钮后把 xml文档添加到树中:代码如下但老是报错
void CNewxmltreeDlg::OnButton1()
{
// TODO: Add your control notification handler code here
LoadXmlToTree( "f:\he.xml ",GetDlgItem(IDC_pTree));
}
const char ROOT[] = "//China ";
bool LoadXmlToTree(LPTSTR xmlFileName,CTreeCtrl *pTree)
{
CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pXMLDom;
HRESULT hr= pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument30));
if ( FAILED(hr) )
{
return FALSE;
}
pXMLDom-> async = VARIANT_FALSE; // default - true,
// 加载xml文件
if(pXMLDom-> load(_variant_t(xmlFileName)) != VARIANT_TRUE)
{
return FALSE;
}
MSXML2::IXMLDOMNodePtr pRootNode = pXMLDom-> selectSingleNode(ROOT); // 取得根节点
if(pRootNode == NULL) return FALSE;
LPTSTR sRoot = _com_util::ConvertBSTRToString(pRootNode-> GetnodeName());
HTREEITEM root = pTree-> InsertItem(_T(sRoot)); // 加载根节点到树
XmlNodeToTreeNode(root,pRootNode,pTree); // 该函数在下面
pXMLDom = NULL;
pRootNode = NULL;
CoUninitialize();
return TRUE;
}
void XmlNodeToTreeNode(HTREEITEM parentItem, MSXML2::IXMLDOMNodePtr pXmlNode,CTreeCtrl *pTree)
{
if( !wcscmp(pXmlNode-> GetnodeTypeString(),L "text ") ) //NODE类型的含义请参考MSDN
return;
MSXML2::IXMLDOMNodeListPtr pXMLNodeList = pXmlNode-> GetchildNodes();
long count = pXMLNodeList-> Getlength(); // 子节点个数
if(count==0)
{ // 没有子节点,则设置父节点名
LPTSTR sNode = _com_util::ConvertBSTRToString(pXmlNode-> GetnodeName());
pTree-> SetItemText(parentItem,sNode);
return;
}
for(int i=0; i <count; i++)
{
LPTSTR sVal= " ";
MSXML2::IXMLDOMNodePtr childNode = pXMLNodeList-> item[i];
HTREEITEM subItem;
if( !wcscmp(childNode-> GetnodeTypeString(),L "text ") )