精华内容
下载资源
问答
  • MSXML介绍

    千次阅读 2007-08-23 18:13:00
    MSXML4不能createinstance的解决方法!(附MSXML介绍)调用MSXML时 如果HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 不能创建成功那说明没有初始化COM组件。只要将 CoInitialize(NULL); 放到...

    MSXML4不能createinstance的解决方法!(附MSXML介绍)

    调用MSXML时 如果HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 不能创建成功那说明没有初始化COM组件。只要将 CoInitialize(NULL);  放到程序初始化函数中就行了!~  另外在stuafx.h中要记得包含#import"MSXML4.DLL"
     
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MSXML介绍以及事例:
     
    利用VC++与MSXML解析XML文档
    一、文档对象模型(DOM)
      DOM是Document Object Model(文档对象模型)的简称,是对XML文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。
      DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:
      ● 描述文档表示和操作的接口;
      ● 接口的属性和方法;
      ● 接口之间的关系以及互操作。
      DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对象,不管是根节点还是实体的属性。
      在DOM中主要有以下三个对象:
      ● XML文档对象
    XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。
      ● XML节点对象
    XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。
      ● XML节点列表
    XML文档模块列表代表了节点的集合。
      利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。
    二、DOM的四个基本接口(引用自: http://bbs.xml.org.cn/dispbbs.asp?boardID=11&ID=9220)

     

    在DOM 接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Documet,Element,Attribute, Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。 NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。 
    1、Document接口 
    Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
    由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
    在DOM树中, Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。

    关于Document接口的IDL(Interface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。
    2、Node接口 
    Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。
    3、NodeList接口 
    NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName。
    在DOM 中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个 NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
    NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。 
    4、NamedNodeMap接口 
    实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
    NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。
    与NodeList相同,在DOM中,NamedNodeMap对象也是"live"的。

    三、MSXML
      
         从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做 MSXML.DLL的动态链接库,实际上它是一个COM(Component Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。
      MSXML.DLL所包括的主要COM接口有:
      1. IXMLDOMDocument(Document接口)
    DOMDocument 对象是XML DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
      2. IXMLDOMNode(Node接口)
      IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
       3. IXMLDOMNodeList
      IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环 "结构来遍历所有的节点。
      4. IXMLDOMParseError
      IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。
      在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode 的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用 createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的setAttribute和 getAttribute方法来设置和获得节点的属性。
    四、编程举例

     

    1、目标文档:  

     <book id="bk101">
          <author>lizlex</author>
          <title>XML Developer's Guide</title>
       </book>

    2、步骤:

    (1)在StdAfx.h中引入动态链接库 MSXML.DLL(C:/windows/system32/msxml4.dll)
     #import <msxml4.dll>

    (2)界面设计:
    分别放入三个Text,用于输入数据,与显示文档内容用,并添加关联的成员变量m_strId,m_strAuthor, m_strTitle;并添加确定按钮:

    (3)产生文档的程序片断
    void CXmlparseDlg::OnButtonGenerate() 
    {
     UpdateData();

     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"); 

    }

    (4)读取XML文档的程序片断
    void CXmlparseDlg::OnButtonLoad() 
    {
     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;
     
     UpdateData(FALSE);
     
    }

     
    展开全文
  • MSXML4

    2007-08-07 09:18:00
    MSXML4不能createinstance的解决方法!(附MSXML介绍)调用MSXML时 如果HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 不能创建成功那说明没有初始化COM组件。只要将 CoInitialize(NULL); 放到...

    MSXML4不能createinstance的解决方法!(附MSXML介绍)

    调用MSXML时 如果HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 不能创建成功那说明没有初始化COM组件。只要将 CoInitialize(NULL);  放到程序初始化函数中就行了!~  另外 在stuafx.h中要记得包含#import"MSXML4.DLL"
     
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MSXML介绍以及事例:
     
    利用VC++与MSXML解析XML文档
    一、文档对象模型(DOM)
      DOM是Document Object Model(文档对象模型)的简称,是对XML文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。
      DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:
      ● 描述文档表示和操作的接口;
      ● 接口的属性和方法;
      ● 接口之间的关系以及互操作。
      DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对象,不管是根节点还是实体的属性。
      在DOM中主要有以下三个对象:
      ● XML文档对象
    XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。
      ● XML节点对象
    XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。
      ● XML节点列表
    XML文档模块列表代表了节点的集合。
      利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。
    二、DOM的四个基本接口(引用自: http://bbs.xml.org.cn/dispbbs.asp?boardID=11&ID=9220)

     

    在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Documet,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。 
    1、Document接口 
    Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
    由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
    在DOM树中,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。

    关于Document接口的IDL(Interface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。
    2、Node接口 
    Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。
    3、NodeList接口 
    NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName。
    在DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
    NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。 
    4、NamedNodeMap接口 
    实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
    NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。
    与NodeList相同,在DOM中,NamedNodeMap对象也是"live"的。

    三、MSXML
      
        从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COM(Component Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。
      MSXML.DLL所包括的主要COM接口有:
      1. IXMLDOMDocument(Document接口)
    DOMDocument对象是XML DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
      2. IXMLDOMNode(Node接口)
      IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
       3. IXMLDOMNodeList
      IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环 "结构来遍历所有的节点。
      4. IXMLDOMParseError
      IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。
      在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode 的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的setAttribute和getAttribute方法来设置和获得节点的属性。
    四、编程举例

     

    1、目标文档:  

     <book id="bk101">
          <author>lizlex</author>
          <title>XML Developer's Guide</title>
       </book>

    2、步骤:

    (1)在StdAfx.h中引入动态链接库 MSXML.DLL(C:/windows/system32/msxml4.dll)
     #import <msxml4.dll>

    (2)界面设计:
    分别放入三个Text,用于输入数据,与显示文档内容用,并添加关联的成员变量m_strId,m_strAuthor, m_strTitle;并添加确定按钮:

    (3)产生文档的程序片断
    void CXmlparseDlg::OnButtonGenerate() 
    {
     UpdateData();

     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"); 

    }

    (4)读取XML文档的程序片断
    void CXmlparseDlg::OnButtonLoad() 
    {
     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;
     
     UpdateData(FALSE);
     
    }

     
    展开全文
  • msxml的使用 vc6

    2014-07-12 18:39:22
    msxml的示例教程,增加删除节点,获取节点值、名称,获取属性名称属性值,增加删除属性等
  • MSXML介绍 .

    千次阅读 2014-06-17 10:11:27
    MSXML4不能createinstance的解决方法!(附MSXML介绍) 调用MSXML时 如果HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 不能创建成功那说明没有初始化COM组件。只要将 CoInitialize(NULL); 放...

    MSXML4不能createinstance的解决方法!(附MSXML介绍)

    调用MSXML时 如果HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 不能创建成功那说明没有初始化COM组件。只要将 CoInitialize(NULL);  放到程序初始化函数中就行了!~  另外在stuafx.h中要记得包含#import"MSXML4.DLL"
     
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MSXML介绍以及事例:
     
    利用VC++与MSXML解析XML文档
    一、文档对象模型(DOM)
      DOM是Document Object Model(文档对象模型)的简称,是对XML文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。
      DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:
      ● 描述文档表示和操作的接口;
      ● 接口的属性和方法;
      ● 接口之间的关系以及互操作。
      DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对象,不管是根节点还是实体的属性。
      在DOM中主要有以下三个对象:
      ● XML文档对象
    XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。
      ● XML节点对象
    XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。
      ● XML节点列表
    XML文档模块列表代表了节点的集合。
      利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。
    二、DOM的四个基本接口(引用自: http://bbs.xml.org.cn/dispbbs.asp?boardID=11&ID=9220)

     

    在DOM 接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Documet,Element,Attribute, Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。 NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。 
    1、Document接口 
    Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
    由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
    在DOM树中, Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。

    关于Document接口的IDL(Interface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。
    2、Node接口 
    Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。
    3、NodeList接口 
    NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName。
    在DOM 中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个 NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
    NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。 
    4、NamedNodeMap接口 
    实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
    NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。
    与NodeList相同,在DOM中,NamedNodeMap对象也是"live"的。

    三、MSXML
      
         从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做 MSXML.DLL的动态链接库,实际上它是一个COM(Component Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。
      MSXML.DLL所包括的主要COM接口有:
      1. IXMLDOMDocument(Document接口)
    DOMDocument 对象是XML DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
      2. IXMLDOMNode(Node接口)
      IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
       3. IXMLDOMNodeList
      IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环 "结构来遍历所有的节点。
      4. IXMLDOMParseError
      IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。
      在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode 的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用 createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的setAttribute和 getAttribute方法来设置和获得节点的属性。
    四、编程举例

     

    1、目标文档:  

     <book id="bk101">
          <author>lizlex</author>
          <title>XML Developer's Guide</title>
       </book>

    2、步骤:

    (1)在StdAfx.h中引入动态链接库 MSXML.DLL(C:/windows/system32/msxml4.dll)
     #import <msxml4.dll>

    (2)界面设计:
    分别放入三个Text,用于输入数据,与显示文档内容用,并添加关联的成员变量m_strId,m_strAuthor, m_strTitle;并添加确定按钮:

    (3)产生文档的程序片断
    void CXmlparseDlg::OnButtonGenerate() 
    {
     UpdateData();

     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"); 

    }

    (4)读取XML文档的程序片断
    void CXmlparseDlg::OnButtonLoad() 
    {
     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;
     
     UpdateData(FALSE);
     
    }

    展开全文
  • MSXML使用教程

    2015-08-26 11:40:44
    对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过 "for...next" 结构来遍历所有的节点。 4.  IXMLDOMParseError IXMLDOMParseError 接口用来返回在解析过程中所出现的详细的...

    DOM接口规范中,有四个基本的接口:DocumentNodeNodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,DocumetElementAttributeTextComment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。

     

    1Document接口

    Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。

    由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。

    DOM树中,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。

    关于Document接口的IDLInterface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。

    2Node接口

    Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,ElementAttrCDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。

    3NodeList接口

    NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName

    DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOMElement节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。

    NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。

    4NamedNodeMap接口

    实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。

    NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。

    NodeList相同,在DOM中,NamedNodeMap对象也是"live"的。

     

    DOMDocument Object Model(文档对象模型)的简称,是对Web文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。

    DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:

    描述文档表示和操作的接口;

    接口的行为和属性;

    接口之间的关系以及互操作。

    DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对象,不管是根节点还是实体的属性。

    DOM中主要有以下三个对象:

    · XML文档对象 XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。

    · XML节点对象 XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。

    · XML节点列表 XML文档模块列表代表了节点的集合。

    利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。

    三、MSXML

    从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COMComponent Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VBVCDELPHIC++ Builder甚至是剧本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。

    MSXML.DLL所包括的主要COM接口有:

    1. DOMDocument

    DOMDocument对象是XML DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSLXSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。

    2. IXMLDOMNode

    IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。

    3. IXMLDOMNodeList

    IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for...next"结构来遍历所有的节点。

    4. IXMLDOMParseError

    IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。

    使用方法:

    在具体应用时可以用DOMDocumentLoad方法来装载XML文档,用IXMLDOMNode selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用createNodeappendChild方法来创建节点和追加节点,用IXMLDOMElementsetAttributegetAttribute方法来设置和获得节点的属性。

    四、程序实现

    下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档。

    1)源XML文档(xmlfile.xml)如下:

    <?xml version="1.0" encoding="GB2312"?>

    <Device id="10041" name="设备1">

    <Type>13</Type>

    <TypeName>保护</TypeName>

    </Device>

    我们在源文档中查找"Device",将其"name"属性设置为"测试设备",为其添加"Model"节点,并设置其文本为"3"

    2)源程序如下:

    CoInitialize(NULL)// 初始化COM

    CComPtr<IXMLDOMDocument> spXMLDOM;

    // 创建解析器实例。

    HRESULT hr = spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));

    VARIANT_BOOL bSuccess = false;

    // 装载XML文档。

    Hr = spXMLDOM->load(CComVariant(L"xmlfile.xml"),&bSuccess);

    CComBSTR  bstrSS(L"Device");

    CComPtr<IXMLDOMNode> spDevice;

    Hr = spXMLDOM->selectSingleNode(bstrSS,&spDevice); //搜索"Device"

    CComQIPtr<IXMLDOMElement>  spDev;

    spDev = spDevice;

    // 设置"Device""name"属性。

    Hr = spDev ->setAttribute(CComBSTR(L"name"),CComVariant("测试设备"));

    CComPtr<IXMLDOMNode> spModelNode;

    // 创建"Model"节点。

    Hr = spXMLDOM->createNode(CComVariant(NODE_ELEMENT)ComBSTR

    "Model"),NULL,& spModelNode);

    CComPtr<IXMLDOMNode> spInsertedNode;

    Hr = spDevice->appendChild (spModelNode,&spInsertedNode);

    // 添加新节点到"Device"节点下面。

    CString strID="3";

    // 设置"Model"的文本。

    hr=spInsertedNode->put_text(strID.AllocSysString());

    / /保存文档。

    hr=spXMLDOM->save(CComVariant("xmlfile.xml"));

    // 结束对COM的使用。

    CoUninitialize();

    因为篇幅的原因,上述代码的每步操作并未对返回的HRESULT类型进行判断,也未进行异常的捕获处理,在实际的编程中读者应根据返回的hr进行决断,以决定程序的流程,同时应进行异常的捕获处理。

    3修改后的XML文档如下

    <?xml version="1.0" encoding="GB2312"?>

    <Device id="10041" name="测试设备">

    <Type>13</Type>

    <TypeName>保护</TypeName>

    <Model>3</Model>

    </Device>

    MFC程序示例:

     

    1、目标文档:

     <book id="bk101">

          <author>lizlex</author>

          <title>XML Developer's Guide</title>

       </book>

    2、步骤:

    (1)StdAfx.h中引入动态链接库 MSXML.DLL(C:\windows\system32\msxml4.dll)

     #import <msxml4.dll>

     

    (2)界面设计:

    分别放入三个Text,用于输入数据,与显示文档内容用,并添加关联的成员变量

    m_strId, m_strAuthor, m_strTitle;并添加确定按钮。

     

    (3)产生文档的程序片断:

    void CXmlparseDlg::OnButtonGenerate()

    {

     UpdateData();

     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");

    }

     

    (4)读取XML文档的程序片断:

    void CXmlparseDlg::OnButtonLoad()

    {

     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;

     UpdateData(FALSE);

    }


    在VC中应用MSXML DOM 的一些基本实现方法:     

     已知变量
    MSXML2::IXMLDOMDocument *pDoc;
    MSXML2::IXMLDOMNode *pChild, *pParent;
    MSXML2::IXMLDOMNode *pNod;
    MSXML2::IXMLDOMElement *pEle;

     
    初始化指针:
    MSXML2::IXMLDOMDocument *pDocument=NULL;
    MSXML2::IXMLDOMNodeList *pNodeList=NULL;
    MSXML2::IXMLDOMNamedNodeMap *pNodeMap=NULL;
    MSXML2::IXMLDOMNode *pNode=NULL
    MSXML2::IXMLDOMText *pText=NULL;
    MSXML2::IXMLDOMElement *pElement=NULL;
    MSXML2::IXMLDOMProcessingInstruction *pProcessingInstruction=NULL;
    MSXML2::IXMLDOMComment *pComment=NULL;

    MSXML2::IXMLDOMParseError *pObjError = NULL;

    已知数据:
    BSTR bstrText, bstrName;
    int  type;

    **)创建新文档
    // hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, 
    //  IID_IXMLDOMDocument,(void**)&m_pXMLDoc);
    HRESULT hr=CoCreateInstance(__uuidof(MSXML2::DOMDocument40),NULL,CLSCTX_INPROC_SERVER,
      __uuidof(MSXML2::IXMLDOMDocument),(void**)&m_pXMLDoc);
        hr = pDocument->put_async(VARIANT_FALSE); 
        hr = pDocument->put_validateOnParse(VARIANT_FALSE);
    hr = pDocument->put_resolveExternals(VARIANT_FALSE);
     

    a)添加子节点到父节点
    pParent->appendChild(pChild, &pNode)
     

    b)创建节点
    VARIANT vtype;
    vtype.vt = VT_I4;
    V_I4(&vtype) = (int)type;
    pDoc->createNode(vtype, bstrName, NULL, &pNode);

     

    c)创建元素节点
    pDoc->createElement(bstrName,pElement);
    (pElement)->put_text(bstrText);

    d)创建文本子节点,并添加到父节点中
    pDoc->createTextNode(bstrText,&pText);
    pParent->appendChild(pText,& pNode)

     

    e)创建// Create a processing instruction element.
    BSTR bstrTarget = SysAllocString(L"xml");
    BSTR bstrData = SysAllocString(L"version='1.0'");
    pDoc ->createProcessingInstruction(bstrTarget, bstrData, &pProcessingInstruction);
    SysFreeString(bstrTarget);
    SysFreeString(bstrData);

     

    f)创建注释节点
    pDoc->createComment(bstrText, &pComment);

     

    g)元素节点属性值
    得到属性值
    VARIANT v;
    pEle->getAttribute(bstrName,&v);
    CString str = v.bstrVal;
    设置属性值
    CComVariant v(str);
    pEle->setAttribute(bstrName, v);

     

    h)节点属性值
    VARIANT v;
    CString str;
    long mCount;
    得到节点属性集
    hr=pNod->get_attributes(&pNodeMap);
    hr=pNodeMap->get_length(&mCount); 
    得到节点属性
    hr=pNodeMap->getNamedItem(bstrName,&pNode);
    pNodeMap->get_item(i,&pNode);
    得到节点属性值
    hr=pNode->get_node
    value(&v);
    str =v.bstrVal;
    删除节点属性
    MSXML2::IXMLDOMNode *moldNode;
    mNodeMape->removeNamedItem(bstrName,&moldNode);
    if (moldNode!=NULL) moldNode->Release();

     

    i)节点
    1)得到节点、节点集
    根据节点名称
    pDoc->getElementsByTagName(bstrName,&pNodeList);
    pNodeList->get_item(0,&pNode);
    得到子节点集
    hr=pNod->get_childNodes(&mNodeList);
    long mCount;
    MSXML2::IXMLDOMNode *pNodeSub;
    mNodeList->get_length(&mCount);
    hr=pNode->get_firstChild(&pNodeSub);
    删除子节点(包含删除节点属性、子节点、当前节点)
    删除当前子节点
    pNodeList->get_item(i,&pNode);
    pNod->removeChild(pNode,&moldNode);
    moldNode->Release();

    2)根据节点得到节点名称
    pNod->get_nodeName(&bstrName);
    3)根据节点得到节点值
    VARIANT v;
    hr=pNod->get_node
    value(&v);

     

    j)XML文件操作
    加载
    VARIANT_BOOL status;
    VARIANT vFileName;
    1
    pDoc->loadXML(bstrName,&status);
    2
    V_BSTR(&vFileName) = strFileName.AllocSysString();
    V_VT(&vFileName) = VT_BSTR;
    vResult = pDoc->load(vFileName,&status);
    保存
    BSTR pBFName = mFileName.AllocSysString();
    CComVariant v(pBFName);
    hr=pDoc->save(v);

    BSTR bstr = NULL;
    pDoc->get_xml(&bstr);

     

    k)错误处理
    BSTR bstr = NULL;
    pDoc->get_parseError(&pObjError);
    pObjError->get_reason(&bstr);
    AfxMessageBox(_T("Failed to load DOM from books.xml. %S\n"),*bstr);


    转自:http://blog.csdn.net/woshinia/article/details/7696732

    展开全文
  • C++msxml解析源代码

    2012-04-11 10:24:46
    在控制台下做的小实例,实现的功能不多,读取节点和属性值,增加节点,删除节点,使用的是 msxml6.dll,由于我的操作系统是64位的,这个dll可能也是64位的,请根据自己的操作系统去使用相应的动态链接库,语言用的...
  • VC++与MSXML

    2019-09-22 05:15:43
     IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for...next"结构来遍历所有的节点。4. IXMLDOMParseError  IXMLDOMParseError接口用来返回在...
  • Inside MSXML Performance(MSXML性能分析) (3) (转)[@more@]MSXML Featuresmicrosoft-com:Office:office" /> MSXML特点 Next...
  • msxml 2.0 3.0 4 6.0 区别

    千次阅读 2013-10-22 12:58:00
    Msxml.dll 1.0 ..... 2.5 Msxml2.dll 2.6  Msxml3.dll 3.0 Msxml4.dll 4.0  Msxml5.dll 5.0 office 2003 -2007 Msxml6.dll 6.0 6.0控件太多
  • MSXML一般使用方法

    2019-11-03 13:22:57
    IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for...next"结构来遍历所有的节点。 4. IXMLDOMParseError IXMLDOMParseError接口用来返回...
  • Inside MSXML Performance(MSXML性能分析) (6) (转)[@more@]ValidationXML:namespace prefix = o ns = "urn:schemas-microsoft-...
  • Inside MSXML Performance(MSXML性能分析) (2) (转)[@more@]MetricsXML:namespace prefix = o ns = "urn:schemas-microsoft-com...
  • Inside MSXML Performance(MSXML性能分析) (5) (转)[@more@]SaveXML:namespace prefix = o ns = "urn:schemas-microsoft-com:Of...
  • MSXML2.XMLHTTP

    2007-10-11 14:00:00
    XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。...客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软
  • MSXML FeaturesMSXML特点Next, lets examine some important scenarios associated with the Document Object Model (DOM)—including loading, saving, walking a DOM tree, and creating a new DOM tree in memo
  • 主要介绍了asp中使用MSXML2.DOMDocument处理XML数据时的注意事项,本文给出了4个需要注意的问题,需要的朋友可以参考下
  • MSXML为xml添加属性

    2015-09-15 20:48:19
    VOID XXX_XML() { IXMLDOMDocumentPtr pXmlDocument; if ( XmlDocument.CreateInstance(__uuidof(XML::DOMDocument)) != S_OK ) { return; } // Do load IXMLDOMElementPtr xmlNode = pXmlDocument->selectS
  • C++ DOM读写xml(msxml6)

    2021-02-07 22:28:44
    这里要注意的是增加了一些空的textnode节点来换行,不加的话生成的xml内容只有一行。 删除函数://删除jia fei mao 这里第一次接触xpath,用它来定位节点很方便。 void DeleteNode() { CoInitialize(NULL); ...
  • XSLT/XML与MSXML

    2011-01-07 10:40:00
    最近一阵发飚,猛地花了两天的时间来研究如何使用MSXML来转换XSLT/XML文档,目前也是小有所成吧。这方面的资料网上也比较少,为此也是花了不少功夫。其中感觉对自己最大的帮助莫过于MSDN了,几乎80%的信息来源都出于...
  • 利用MSXML解析XML文本

    2008-09-05 14:49:00
    利用MSXML解析XML文本 一、引言 当前Web上流行的脚本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不...
  • MFC中利用MSXML解析XML文档

    千次阅读 2016-03-24 11:44:26
    MFC中利用MSXML解析XML文档 一、XML 简介 XML(Xtensible Markup Language,即扩展标记语言)的发展起源于1996年。当时,出版界巨头和Web业内人士经过共同讨论,提出了创建SGML(Standard Generalized ...
  • 在自由线程模式中,工作空间会大大增加,如果你产生了很多需要内存管理去释放的内存,这在进行大文档的 XSL 转换时会发生。在这种情况下,你会将可用的内存资源用尽,并频繁调用虚存管理器,性能也就急剧下降。你...
  • 最起码,验证可能会使载入文档的时间增加两倍或三倍。 MSXML January 2000 Web Release 中新增加了 SchemaCollection 对象,它能够使得 XML Schema 只需载入一次,并能在各文档验证时共享。这将在以后的文章中讨论。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,780
精华内容 2,312
关键字:

msxml增加