void CMonitorEmulationView::LoadTree()
{
HTREEITEM CityTree,CompTree;
char path[256];
memset(path,0,256);
GetModuleFileName(NULL,path,256);
LPCTSTR urf="TreeXML.xml";
strcat(p,urf);
xml::IXMLDOMDocumentPtr pXMLDoc(__uuidof(xml::DOMDocument));
if(!PathFileExists(path))
return;
try
{
pXMLDoc->load(path);
}
catch(_com_error& e)
{
MessageBox("文件读取失败: " + e.Description(), "错误", MB_ICONWARNING);
return;
}
xml::IXMLDOMNodeListPtr pNodeList=NULL;
xml::IXMLDOMElementPtr spElement;
HRESULT hr = pXMLDoc->get_documentElement(&spElement); //获取根结点
CComBSTR strTagName;
hr = spElement->get_tagName(&strTagName);
xml::IXMLDOMNodeListPtr spNodeList;
hr = spElement->get_childNodes(&spNodeList); //获取子结点列表
long lCount;
hr = spNodeList->get_length(&lCount);
for (long i=0; i<lCount; ++i)
{
CComVariant varNodeValue;
xml::IXMLDOMNodePtr spNode;
xml::DOMNodeType NodeType;
xml::IXMLDOMNodeListPtr spChildNodeList;
hr = spNodeList->get_item(i, &spNode); //获取结点
hr = spNode->get_nodeType(&NodeType); //获取结点信息的类型
xml::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
xml::IXMLDOMNodePtr pAttrItem;
spNode->get_attributes(&pAttrs);
long nCount ;
pAttrs->get_length(&nCount);
for(int i = 0 ; i < nCount ; i++)
{
pAttrs->get_item(i,&pAttrItem);
//我们可以通过函数get_nodeName,get_nodeTypedValue得到属性名和属性值
//也可以直接得到
CString strAttrName = (char*)(_bstr_t)pAttrItem->nodeName;
CString strAttrValue = (char*)(_bstr_t)pAttrItem->nodeTypedValue;
CityTree=m_wndTreeCtrl.InsertItem(_bstr_t(strAttrValue),userItem[0]);//父项1插入子项
}
if (NODE_ELEMENT == NodeType)
{
hr = spNode->get_childNodes(&spChildNodeList);
long childLen;
hr = spChildNodeList->get_length(&childLen);
for (int j=0; j<childLen; ++j)
{
xml::IXMLDOMNodePtr spChildNode;
CComBSTR value;
hr = spChildNodeList->get_item(j, &spChildNode);
hr = spChildNode->get_nodeName(&value); //获取结点名字
hr = spChildNode->get_text(&value); //获取结点的值
CString strValue=(char*)(_bstr_t)value;
strValue.TrimRight();
CompTree=m_wndTreeCtrl.InsertItem((_bstr_t)strValue,CityTree);//父项1插入子项
spChildNode.Release();
}
}
spNode.Release();
spChildNodeList.Release();
}
spNodeList.Release();
spElement.Release();
pXMLDoc.Release();
}