VC读写XML文件

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 alphaWorks XML 4C 的基础。Xerces 还用于 Apache XSLT 处理器 Xalan 中。Xerces 支持 DOM、SAX,以及对 DTD 的验证。最新版本读取并解释了部分“W3C XML 模式推荐”(打算到 2001 年底实现完整的 XML 模式支持)。


附:C/C++ 开发人员的解析器

供应商 事件 文档 特点 许可证
expat James Clark/expat 小组 本机与 SAX - 带有本机 API 和 SAX 封装器的、非常快速的推模型解析器。 LGPL( 免费
libxml Gnome SAX DOM 非常强壮;SAX 与 DOM 封装器;执行 DTD 验证 LGPL(免费
MSXML Microsoft SAX DOM Win32 的 Microsoft XML EULA(免费
Xerces Apache Software Foundation SAX DOM 执行 SAX 及 DOM 级别 1 和 2;DTD 验证;增加的 XML 模式 Apache(免费
XTL Vivid Creations SAX DOM 带 SAX 和 DOM 的基于 STL 的 XML 工具箱 商业
RXP 爱丁堡大学 - 本机 验证以 C 编写的了解名称空间的 XML 解析器 GPL(免费
XML 4C IBM alphaWorks SAX DOM IBM 发起的 Xerces 的变体 Apache(免费
Oracle XDK 8i Oracle SAX DOM Oracle 主办的用于 C++ 的 XML 工具箱 非商业
Pull Parser Extreme! Lab - 本机 印地安那大学发起的用于 C++ 的轻量型 XML 工具箱 非商业
XML Booster PhiDaNi Software - 本机 解析器发生器,生成 C 源码解析器 商业


你可能感兴趣的:(apache,xml,Microsoft,XSLT,mozilla,attributes)