VC++读取XML文件生成树
来源:互联网 发布:淘宝网 m.taobao.com 编辑:程序博客网 时间:2024/05/16 08:34
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();
}
...{
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();
}
- VC++读取XML文件生成树
- VC++读取XML文件生成树
- VC++读取XML文件生成树
- VC++读取XML文件生成树
- VC 读取XML文件
- ztree读取xml文件,生成栏目树
- 读取 生成 格式化 XML 文件
- vc中的xml文件读取操作
- VC 6.0中读取XML文件
- vc++读取xml文件中的属性值
- VC创建与读取XML文件
- DOM模型的XML文件生成读取
- DOM模型的XML文件生成读取
- 构造xml文件(生成与读取)
- Java读取,生成XML文本,文件
- 读取XML文件并生成DataTable
- C#中读取xml文件和生成xml文件
- opencv 创建和读取xml文件以及matlab生成xml
- 检测域名有效期的 Shell 脚本
- 基于SSH开发架构的重新分层
- 开机记事本病毒+手工清理
- GridGain 2.0发布 开源的Java网格计算框架
- asp.net 身份证验证
- VC++读取XML文件生成树
- .NET 打包的时候数据库一起打包
- C#弹出选择对话框的程序
- Visual C# 对话框大全
- C#:皮特的故事(完善代码可执行版,更新中)
- 内存调试技巧:C 语言最大难点揭秘
- 你好啊,欢迎大家访问!
- 欲哭无泪嘛
- 转 :一篇关于字节对齐的非常好的文章