已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MSXML2:IXMLDOMDocumentPtr pDoc; MSXML2:IXMLDOMElementPtr xmlRoot ; / 创建DOMDocument对象 HRESULT hr = pDoc.CreateInstance(_uuidof(MSXML2:DOMDocument40); if ( ! SUCCEEDED(hr) MessageBox( 无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! ); return ; / 根节点的名称为Book / 创建元素并添加到文档中 xmlRoot = pDoc - createElement(_bstr_t) Book ); / 设置属性 xmlRoot - setAttribute( id ,( const char * )m_strId);pDoc - appendChild(xmlRoot);MSXML2:IXMLDOMElementPtr pNode; / 添加“author”元素 pNode = pDoc - createElement(_bstr_t) Author );pNode - Puttext(_bstr_t)( const char * )m_strAuthor);xmlRoot - appendChild(pNode); / 添加“Title”元素 pNode = pDoc - createElement( Title );pNode - Puttext( const char * )m_strTitle);xmlRoot - appendChild(pNode); / 保存到文件 / 如果不存在就建立,存在就覆盖 pDoc - save( d:/he.xml );-MSXML2:IXMLDOMDocumentPtr pDoc;HRESULT hr;hr = pDoc.CreateInstance(_uuidof(MSXML2:DOMDocument40); if (FAILED(hr) MessageBox( 无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! ); return ; / 加载文件 pDoc - load( d:/he.xml ); MSXML2:IXMLDOMNodePtr pNode; / 在树中查找名为Book的节点, / 表示在任意一层查找 pNode = pDoc - selectSingleNode( /Book );MSXML2:DOMNodeType nodeType; / 得到节点类型 pNode - get_nodeType( & nodeType); / 节点名称 CString strName;strName = ( char * )pNode - GetnodeName(); / 节点属性,放在链表中 MSXML2:IXMLDOMNamedNodeMapPtr pAttrMap = NULL;MSXML2:IXMLDOMNodePtr pAttrItem;_variant_t variantvalue;pNode - get_attributes( & pAttrMap); long count;count = pAttrMap - get_length( & count);pAttrMap - get_item( 0 , & pAttrItem); / 取得节点的值 pAttrItem - get_nodeTypedValue( & variantvalue);m_strId = ( char * )(_bstr_t)variantvalue;/ 添加整个文档的根节点 void AddRootNode( CString strRootNode , CString strText = ) m_pElement = m_pDoc-createElement( (LPCTSTR)strRootNode ); m_pElement -put_text( _bstr_t( (LPCTSTR)strText) ); m_pDoc-appendChild( m_pElement ); 三种最流行的开放源码 XML 库 是 expat、libxml 和 Xerces。这三者都是跨平台的,每一种都充当 XSLT 库 实现的基础,一旦满足了基本 XML 需要之后,它就会给您一条成长途径。 expat 是 James Clark 创始的开放源码面向事件的 XML 解析库 。他已经将该项目转让给了 SourceForge 中的一个小组。有一个 SAX 封装器可供使用。在许多项目中都可以找到 expat 解析器,如开放源码浏览器 Mozilla、XSLT 处理器 Transformiix 和 RDF 工具 repat。 libxml 为类似于 SAX 和 DOM 的操作提供了双重方式 API。它支持对 DTD 的验证,并且在 Gnome 的 XSLT 处理器libxslt中使用。libxml 经过重写,已作为 libxml(2) 发布,也许还称为 libxml2 。这个库 的用户应该确保他们拥有了当前版本。 Xerces 是非常坚固的、拥有大量文档的库 ,它充当 IBM alphaWorksXML 4C 库 的基础。Xerces 还用于 Apache XSLT 处理器 Xalan 中。Xerces 支持 DOM、SAX,以及对 DTD 的验证。最新版本读取并解释了部分“W3CXML 模式推荐”(打算到 2001 年底实现完整的XML 模式支持)。附:C/C+ 开发人员的解析器库供应商事件文档特点许可证expatJames Clark/expat 小组本机与 SAX-带有本机 API 和 SAX 封装器的、非常快速的推模型解析器。LGPL( 免费)libxmlGnomeSAXDOM非常强壮;SAX 与 DOM 封装器;执行 DTD 验证LGPL(免费)MSXMLMicrosoftSAXDOMWin32 的 Microsoft XML 库EULA(免费)XercesApache Software FoundationSAXDOM执行 SAX 及 DOM 级别 1 和 2;DTD 验证;增加的XML 模式Apache(免费)XTLVivid CreationsSAXDOM带 SAX 和 DOM 的基于 STL 的 XML 工具箱商业RXP爱丁堡大学-本机验证以 C 编写的了解名称空间的 XML 解析器GPL(免费 )XML 4CIBM alphaWorksSAXDOMIBM 发起的 Xerces 的变体Apache(免费)Oracle XDK 8iOracleSAXDOMOracle 主办的用于 C+ 的 XML 工具箱非商业Pull ParserExtreme! Lab-本机印地安那大学发起的用于 C+ 的轻量型 XML 工具箱非商业XMLBoosterPhiDaNi Software-本机解析器发生器,生成 C 源码解析器商业-Boost读取XML配置文件-前两天因工作需要写了个xml配置脚本解析的功能类,虽说有N种方式可以实现,但考虑到Boost库在此方面的易操作性(虽支持不够健全,如Unicode支持等)所以封装了一下,具体如下:/CProcessXmlConfigFile.h(此类由Dll导出)i nclude stdafx.h#pragma oncei nclude i nclude i nclude i nclude i nclude i nclude i nclude header.h#define MAX_PANLIST_NUM 9 /默认面板个数#define MAX_FNAME_LEN 256 /文件名长度宏using namespace boost:property_tree;typedef ptree xmlParser;typedef vector panNames_t;typedef boost:shared_ptr sh_pstr;typedef boost:tuples:tuple node_t;typedef std:list ptree_nodes_t;/class AFX_EXT_CLASS CProcessXmlConfigFile : private boost:noncopyablepublic: virtual CProcessXmlConfigFile(void); /获取类唯一实例的静态方法 static CProcessXmlConfigFile& instance(const string& xmlfile); /|=| /| 以下为设置xml文件的各方法 | /|=| void getPanListInfo(void); void getTreeInfoOfPan(PanIndex _index); inline panNames_t getPanList(void) const return m_panobj; inline ptree_nodes_t getPtreeNodeList(void) const return m_ptreeobj; private: CProcessXmlConfigFile(const string& xmlfile); /合理性验证方法_index:面板索引 bool ICanWork(PanIndex _index); /加载文件xml文件名 bool loadfile(const string& xmlfile); /递归遍历节点目录树函数nodepath:节点路径 void recursive_print(const string& nodepath);private: xmlParser m_parser; /xml文件解析对象 panNames_t m_panobj;/存储面板对象列表 /存储当前面板下的树节点对象列表 ptree_nodes_t m_ptreeobj; ;/CProcessXmlConfigFile.cppi nclude StdAfx.hi nclude ProcessXmlConfigFile.hi nclude / i nclude i nclude i nclude i nclude / i nclude / i nclude / i nclude / i nclude / i nclude using namespace std;using namespace boost;/参数默认值.const int iDefaultInt = 0;const string strNullString = ;const char chflag = /;const string strPan = doc/pans/pan;const string strflag = ;const wstring win32_dir_splitchar = L;/CProcessXmlConfig:CProcessXmlConfigFile(const string& xmlfile) loadfile(xmlfile); m_panobj.clear(); m_panobj.reserve(MAX_PANLIST_NUM);CProcessXmlConfig:CProcessXmlConfigFile(void)CProcessXmlConfigFile& CProcessXmlConfig:instance(const string& xmlfile) static CProcessXmlConfigFile _instance(xmlfile); return _instance;void CProcessXmlConfig:getPanListInfo( void ) /开始获取. /首先获取总面板节点个数 assert(m_parser.get_optional(doc.pans.glcount); /循环获取各节点名称 string str = ; auto_t(child, m_parser.get_child(doc.pans); for (auto_t(t, child.begin(); t != child.end(); +t) str = t-first; if (str.find(pan) = string:npos)continue; m_panobj.push_back(t-second.data(); void CProcessXmlConfig:getTreeInfoOfPan( PanIndex _index ) /防御性设计 if (!ICanWork(_index)return; /. format fmt(%s-%d); fmt % strPan % _index; m_ptreeobj.clear(); recursive_print(fmt.str();bool CProcessXmlConfig:ICanWork( PanIndex _index ) return (_index = ST_PhysicalCharacteristics & _index first; if (strKey.find(strflag) != string:npos) continue; str = pt-second.data();/ for (size_t i = 0; i nproc; +i)/ cout t;/ cout strKey = first; size_t atnval = tt-second.get_(); m_ptreeobj.push_back(make_tuple(sh_pstr(new string(strKey), atnval, sh_pstr(str.empty() ? new string(empty) : new string(str);/ cout atkey : atnval first; if (atnval 0) /若子节点数目不止一个则递归遍历 +nproc; recursive_print(strKey); -nproc;/ cout getPanListInfo(); szPanName = instance-getPanList(); if (szPanName.empty()return;/ BOOST_FOREACH(panNames_t:_type& p, szPanName)/ AfxMessageBox(CString(p.c_str(); for (size_t i = 0; i szPanName.size(); +i) / 首先生成树 CViewTree * ptree = new CViewTree; if (!ptree)return; /. FillClassView(); /. FillClassView()方法主体如下: /防御性设计 if (m_objtree.empty()return; if (m_nindex = m_objtree.size()return; shared_wnd_ptr pTreeView = m_objtreem_n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园区绿植出租合同范本
- 外借营业执照合同范本
- 围墙建设劳务合同范本
- 园林劳务分包合同范本
- 多人合伙购车合同范本
- 大中专毕业就业协议书
- 场地租赁保证金协议书
- 因劳动合同调解协议书
- 外贸销售合同框架协议
- 商业加盟经营合同范本
- GB/T 42567.2-2023工业过程测量变送器试验的参比条件和程序第2部分:压力变送器的特定程序
- 中医病证诊断疗效
- 电线电缆验收要求和相关标准
- 鼻咽癌免疫治疗特瑞普利单抗
- 酒店住宿水单模板-可修改
- 《公共政策学-政策分析的理论方法和技术》重点解析讲述
- GB/T 5782-2016六角头螺栓
- GB/T 18318.4-2009纺织品弯曲性能的测定第4部分:悬臂法
- 化工原理干燥课件
- 《社会学概论新修(第五版)》课件第十七章
- 药监系统官方培训 王知坚 益生菌相关药物的质量分析与控制 浙江省食品药品检验研究院
评论
0/150
提交评论