如何用vc创建和读取xml文件

合集下载

VC++ xml解析

VC++ xml解析

三种最流行的开放源码XML 库是expat、libxml 和Xerces。

第一部分:DOM解析:概述:DOM解析将会把一个完整的XML文档读进来,生成一个结构树。

这样会要把XML文档全部都加载到内在中。

所以解析起来的速度会要慢一些。

1、如何加载xml文件://创建DOM,加载XML文档MSXML::IXMLDOMDocumentPtr pCommandDoc;pCommandDoc.CreateInstance(__uuidof(MSXML::DOMDocument));pCommandDoc->put_async(V ARIANT_FALSE);pCommandDoc->put_validateOnParse(VARIANT_FALSE);pCommandDoc->put_resolveExternals(V ARIANT_FALSE);pCommandDoc->put_preserveWhiteSpace(V ARIANT_TRUE);pCommandDoc->load(file.GetBuffer(0));2、在XML文档中查找指定的结点://找到MSXML::IXMLDOMNodePtrpRootNode=pCommandDoc->selectSingleNode("root/record");if (pRootNode==NULL){return ;}3、得到XML文档中,结点的属性CString strTemp;MSXML::IXMLDOMNamedNodeMapPtr pAttrs = NULL;pRootNode->get_attributes(&pAttrs);if (pAttrs==NULL){return;}MSXML::IXMLDOMNodePtr pRequestTypeAttr=pAttrs->getQualifiedItem("name","");_bstr_t strRequestType=pRequestTypeAttr->Gettext();strTemp=strRequestType.operator char *();4、得到结点的内容_bstr_t strVisiPort=pNode->Gettext();5、设置结点的内容HRESULT hr=pNode->put_text(_bstr_t(m_strGatewayPassword));6、设置一个属性内容IXMLDOMAttribute *pa=NULL;bstr = SysAllocString(L"属性1");pXMLDom->createAttribute(bstr,&pNode);var = VariantString(L"strin");pa->put_value(var);pRoot->setAttributeNode(pa, &pa1);第二部分、如何使用SAX解析概述:SAX使用的是加载式的,将会把XML文档分断,加载到内存中。

利用CMarkup生成XML文件

利用CMarkup生成XML文件

创建一个XML文档对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。

.在这个位置,如果你调用AddElem("ORDER") ,你的文档会简单的装一个空ORDER元素<ORDER/>. 然后调用AddChildElem 在根元素的下面创建元素(例如:“进入”根元素内部,层次表示).下面的示例代码创建一个XML文档并返回它(的内容)到一个字符串中。

CMarkup xml;xml.AddElem( "ORDER" );xml.AddChildElem( "ITEM" );xml.IntoElem();xml.AddChildElem( "SN", "132487A-J" );xml.AddChildElem( "NAME", "crank casing" );xml.AddChildElem( "QTY", "1" );CString csXML = xml.GetDoc();这些代码产生了下面的XML,这个根结点是ORDER元素;注意它的开始标签<ORDER> 在开头,结束标签</ORDER>在结尾。

当一个元素是在一个父下面(深入或被包含),这个父元素的开始标签要在它之前,结束标签要在它之后。

ORDER元素包含一个ITEM元素,而ITEM元素包含了三个字子元素:SN、NAME和QTY;<ORDER><ITEM><SN>132487A-J</SN><NAME>crank casing</NAME><QTY>1</QTY></ITEM></ORDER>如例子中所显示的,你也能够在一个子元素下创建新元素,这需要调用IntoElem 移动你的当前主位置到当前子元素位置,然后你就可以在这下面增加一个子元素了。

VC++使用DOM操作XML文档

VC++使用DOM操作XML文档
象 [】 1。
收 稿 日期 ;0 80 —2 2 0 —40 责 任 编辑 : 张 军
这 些 对象 包 含结 点 的添 加 、 除 和浏 览 等基 本 删 的功 能 。利用这些 功能可 以对 X ML文档 进行 各 种 操作 。对 象级 的操 作 比起 直接 对文本 操作 要容 易得 多, 也要 直观得 多 。
2 X ML文 档
XML文 档 由 D D 和 XML 文 本 组 成 , T T D D
作 者 简 介 : 玉 霞 ( 9 8) 女 , 北 无 极 人 , 要 从 事 经 济 信 息 郭 17 一, 河 主
的计 算 机 化 管理 工 作 。
( o u n y ed f io 是 一组 标记符 的语法 规 d cme t p ei t n) t ni 则, 明 X 表 ML 文本 是 怎么 样 组 织 的 , 如 D D 可 比 T
XML OMTet D x
描 绘 XML文 档 元 素 或 属性 的 文本 内容
1 D M 模 型 O
D OM 模型 需要 对整 个 X ML文档 进行 扫描 , 然 后解 析生成 一个 对象 树 , ML文 档 中的所 有 元 素 、 X 元素 属性 、 文本 都是 用对 象来 表示 , 而不是孤 立 的文 本 。表 l简 单 介 绍 了 D OM 包 含 的 重 要 基 本 对
V o . 5, 1 2 No. 4
J l 0 8 uy2 0
文 章编 号 :0 8 1 3 ( 0 8 0 — 2 0 0 1 0 — 5 4 2 0 ) 4 0 5 —2
VC ++使用 D OM 操作 X ML文档
郭 玉霞
( 北省经 济信息 中心信 息 市场 处 , 河 河北石 家庄 0 05 ) 5 0 1

C#中读取xml文件指定节点

C#中读取xml文件指定节点

C#中读取xml文件指定节点假设xml文件内容是<?xml version="1.0" encoding="utf-8"?><Workflow><Activity><ActivityId>1</ActivityId><ActivityName>start</ActivityName><BindingPageId>1</BindingPageId><BindingRoleId>1</BindingRoleId><ActivityLevel>1</ActivityLevel></Activity><Activity><ActivityId>2</ActivityId><ActivityName>pass</ActivityName><BindingPageId>2</BindingPageId><BindingRoleId>2</BindingRoleId><ActivityLevel>2</ActivityLevel></Activity></Workflow>我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。

可以使用XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。

前一个是查找匹配的第一个节点,而后一个则会返回一个节点列表。

1.XmlDocument.SelectSingleNode方法的使用首先创建一个读取xml文件的方法ReadXmlNode/// <summary>/// 读取xml中的指定节点的值/// </summary>public void ReadXmlNode(string filename){XmlDocument xmlDoc = new XmlDocument();try{xmlDoc.Load(filename);//读取Activity节点下的数据。

C语言读写XML文档:libmxml库初学笔记(Mini-XML)

C语言读写XML文档:libmxml库初学笔记(Mini-XML)

C语⾔读写XML⽂档:libmxml库初学笔记(Mini-XML)使⽤XML存取数据很⽅便。

官⽹有详尽的英⽂⼿册,这⾥还找到了⼀份中⽂⼿册:这⾥只放⾃⼰学习时写的测试代码,有兴趣的同学可以做个参考。

#include<mxml.h>//创建xml⽂档//声明创建 xml树需要的 node节点mxml_node_t* xml; // xml格式标记mxml_node_t* keys_n; // 词汇库,unkey-词汇主键的⽗节点mxml_node_t* unikey_n; //⼀条词汇记录的基本单元,mark-词汇标签和 explain-词汇释义的⽗节点mxml_node_t* elem_n; //创建 mark explain 的节点//在内存中通过挂载node节点,构建 xml treexml=mxmlNewXML("1.0");//创建xml⽂档格式标记,必须,xml tree的根keys_n=mxmlNewElement(xml, "keys");//新节点,名为keys,挂载到 xmlunikey_n=mxmlNewElement(keys_n, "unikey");//新节点,名为unikey,挂载到 keysmxmlElementSetAttr(unikey_n, "word", "go alpha");//为unikey_n的节点设置属性:word="go alpha"elem_n=mxmlNewElement(unikey_n, "elem");//新节点,名为elem, 挂载到unikeymxmlElementSetAttr(elem_n, "element", "mark");//为elem_n的节点设置属性:element="mark"mxmlNewText(elem_n, 0, "AI");//为elem_n的节点新增⽂本,⽂本前的whitespace(空格)个数为0,内容为”AI”elem_n=mxmlNewElement(unikey_n, "elem");//新节点,名为elem, 挂载到unikeymxmlElementSetAttr(elem_n, "element", "explain");//为elem_n的节点设置属性:element="explain"mxmlNewText(elem_n, 0, "Google的AI程序");//为elem_n的节点新增⽂本,⽂本前的whitespace(空格)个数为0//将内存中创建的节点树写⼊⽂件FILE *fp = fopen("/Users/yaou/Area/tmp/xmltest-1.xml", "w");mxmlSaveFile(xml, fp, MXML_NO_CALLBACK);//关闭⽂件fclose(fp);//释放内存中的节点树mxmlDelete(xml);之后⼿动在新⽂件xmltext-1.xml ⾥添加⾥⼀些节点。

读写XML的四种方法

读写XML的四种方法

读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。

它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。

在读写和处理XML数据时,有许多方法可供选择。

本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。

1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。

在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。

读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。

写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。

使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。

- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。

- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。

- 通过Document对象的方法遍历和操作XML文档的节点。

使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。

- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。

- 使用DocumentBuilder对象创建一个Document对象。

- 通过Document对象的方法创建和添加元素节点、属性节点等。

- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。

DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。

c解析xml常用方法

c解析xml常用方法

c解析xml常用方法解析XML是指将XML文档中的数据提取与分析的过程。

XML是一种标记语言,用于描述数据的结构与内容。

常用的XML解析方法包括DOM、SAX和StAX。

DOM解析:DOM(Document Object Model)是一种将XML文档表示为文档树的解析方法。

DOM解析将整个XML文档加载到内存中,并构建一个树形结构,可以方便地对XML文档进行遍历和操作。

常用的DOM解析类包括DocumentBuilder和Document类。

1.创建DOM解析器:```javaDocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(;DocumentBuilder builder = factory.newDocumentBuilder(;```2.加载XML文档:```javaDocument document = builder.parse(new File("file.xml")); //通过文件Document document = builder.parse(inputStream); //通过输入流Document document = builder.parse(url); //通过URL```3.获取根节点:```javaElement rootElement = document.getDocumentElement(;```4.遍历子节点:```javaNodeList nodeList = rootElement.getChildNodes(;for (int i = 0; i < nodeList.getLength(; i++)Node node = nodeList.item(i);if (node.getNodeType( == Node.ELEMENT_NODE)Element element = (Element) node;//处理子节点}```SAX解析:SAX(Simple API for XML)是一种基于事件驱动的解析方法。

c#读写XML文件

c#读写XML文件

System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、 XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。本文将重点介绍这些类,因为它们是最基本也是最重要的类。
XmlNode类是一个非常重要的类,它代表了XML文档中的某个节点。该节点可以是XML文档的根节点,这样它就代表整个XML文档了。它是许多很有用的类的基类,这些类包括插入节点的类、删除节点的类、替换节点的类以及在XML文档中完成导航功能的类。同时,XmlNode类还为程序员提供了获取双亲节点、子节点、最后一个子节点、节点名称以及节点类型等的属性。它的三个最主要的子类包括: XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument类代表了一个XML文档,它提供了载入和保存XML文档的方法和属性。这些方法包括了Load、LoadXml和Save等。同时,它还提供了添加特性(Attributes)、说明(Comments)、空间(Spaces)、元素(Elements)和新节点(New Nodes)等XML项的功能。XmlDocumentFragment类代表了一部分XML文档,它能被用来添加到其他的XML文档中。 XmlDataDocument类可以让程序员更好地完成和中的数据集对象之间的互操作。
using System;
using System.Xml;
namespace ReadXml
{
class Class1
{
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何用vc创建和读取xml文件当前Web上流行的剧本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。

也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。

XML (eXtensible Markup Language)语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大缩减了SGML的复杂性。

XML语言系统建立的目的就是使它不仅能够表示文档的内容,而且可以表示文档的结构,这样在同时能够被人类理解的同时,也能够被机器所理解。

XML要求遵循一定的严格的标准。

XML分析程序比HTML浏览器更加要挑剔语法和结构,XML要求正在创建的网页正确的使用语法和结构,而不是象HTML一样,通过浏览器推测文档中应该是什么东西来实现HTML的显示,XML使得分析程序不论在性能还是稳定性方面都更容易实现。

XML文档每次的分析结果都是一致的,不象HTML,不同的浏览器可能对同一个HTML作出不同的分析和显示。

同时因为分析程序不需要花时间重建不完整的文档,所以它们能比同类HTML能更有效地执行其任务。

它们能全力以赴地根据已经包含在文档中的那个树结构建造出相应的树来,而不用在信息流中的混合结构的基础上进行显示。

XML标准是对数据的处理应用,而不是只针对Web网页的。

任何类型的应用都可以在分析程序的上面进行建造,浏览器只是XML的一个小的组成部分。

当然,浏览仍旧极其重要,因为它为XML工作人员提供用于阅读信息的友好工具。

但对更大的项目来说它就不过是一个显示窗口。

因为XML具有严格的语法结构,所以我们甚至可以用XML来定义一个应用层的通讯协议,比如互联网开放贸易协议(Internet Open Trading Protocol)就是用XML来定义的。

从某种意义上说,以前我们用BNF范式定义的一些协议和格式从原则上说都可以用XML来定义。

实际上,如果我们有足够的耐心,我们完全可以用XML来定义一个C++语言的规范。

当然,XML允许大量HTML样式的形式自由的开发,但是它对规则的要求更加严格。

XML主要有三个要素:DTD(Document Type Declaration——文档类型声明)或XML Schema(XML大纲)、XSL(eXtensible Stylesheet Language——可扩展样式语言)和XLink(eXtensible Link Language——可扩展链接语言)。

DTD和XML大纲规定了XML文件的逻辑结构,定义了XML文件中的元素、元素的属性以及元素和元素的属性之间的关系;Namespace(名域)实现统一的XML文档数据表示以及数据的相互集成;XSL是用于规定XML文档呈现样式的语言,它使得数据与其表现形式相互独立,比如XSL能使Web浏览器改变文档的表示法,例如数据的显示顺序的变化,不需要再与服务器进行通讯。

通过改变样式表,同一个文档可以显示得更大,或者经过折叠只显示外面得一层,或者可以变为打印得格式。

而XLink将进一步扩展目前Web上已有的简单链接。

二、实现XML解析的说明当然,从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但是实际上微软已经给我们提供了一个XML语法解析器,如果你安装了IE5.0以上版本的话,实际上你就已经安装了XML语法解析器。

可以从微软站点()下载最新的MSXML的SDK和Parser文件。

它是一个叫做MSXML.DLL的动态链接库,最新版本为msxml3,实际上它是一个COM对象库,里面封装了所有进行XML解析所需要的所有必要的对象。

因为COM是一种以二进制格式出现的和语言无关的可重用对象。

所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是剧本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。

下面的关于XML文档对象模型的介绍是基于微软最新的msxml3为基础进行的。

三、XML文档对象(XML DOM)模型分析XML DOM对象提供了一个标准的方法来操作存储在XML文档中的信息,DOM应用编程接口(API)用来作为应用程序和XML文档之间的桥梁。

DOM可以认为是一个标准的结构体系用来连接文档和应用程序(也可以是剧本语言)。

MSXML解析器允许你装载和创建一个文档,收集文档的错误信息,得到和操作文档中的所有的信息和结构,并把文档保存在一个XML文件中。

DOM提供给用户一个接口来装载、到达和操作并序列化XML文档。

DOM提供了对存储在内存中的XML文档的一个完全的表示,提供了可以随机访问整个文档的方法。

DOM允许应用程序根据MSXML解析器提供的逻辑结构来操作XML文档中的信息。

利用MSXML所提供的接口来操作XML。

实际上MSXML解析器根据XML文档生成一个DOM树结构,它能够读XML文档并根据XML文档内容创建一个节点的逻辑结构,文档本身被认为是一个包含了所有其他节点的节点。

DOM使用户能够把文档看成是一个有结构的信息树,而不是简单的文本流。

这样应用程序或者是剧本即使不知道XML的语义细节也能够方便的操作该结构。

DOM包含两个关键的抽象:一个树状的层次、另一个是用来表示文档内容和结构的节点集合。

树状层次包括了所有这些节点,节点本身也可以包含其他的节点。

这样的好处是对于开发人员来说,他可以通过这个层次结构来找到并修改相应的某一个节点的信息。

DOM把节点看成是一个通常的对象,这样就有可能创建一个剧本来装载一个文档,然后遍历所有的节点,显示感兴趣的节点的信息。

注意节点可以有很多中具体的类型,比如元素、属性和文本都可以认为是一个节点。

微软的MSXML解析器读一个XML文档,然后把它的内容解析到一个抽象的信息容器中称为节点(NODES)。

这些节点代表文档的结构和内容,并允许应用程序来读和操作文档中的信息而不需要显示的知道XML的语义。

在一个文档被解析以后,它的节点能够在任何时候被浏览而不需要保持一定的顺序。

对开发人员来说,最重要的编程对象是DOMDocument。

DOMDocument对象通过暴露属性和方法来允许你浏览,查询和修改XML文档的内容和结构,每一个接下来的对象暴露自己的属性和方法,这样你就能够收集关于对象实例的信息,操作对象的值和结构,并导航到树的其他对象上去。

MSXML.DLL所包括的主要的COM接口有:(1)DOMDocumentDOMDocument对象是XML DOM的基础,你可以利用它所暴露的属性和方法来允许你浏览、查询和修改XML文档的内容和结构。

DOMDocument表示了树的顶层节点。

它实现了DOM文档的所有的基本的方法并且提供了额外的成员函数来支持XSL和XSLT。

它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。

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

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

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

下面主要描述一个DOMDocument对象的创建过程,这里我们用VC描述创建一个文档对象的过程。

HRESULT hr;IXMLDomDocument* pXMLDoc;IXMLDOMNode* pXDN;Hr=CoInitialize(NULL); //COM的初始化//得到关于IXMLDOMDocument接口的指针pXMLDOC。

hr=CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPPROC_SERVER,IID_IXMLDOMDocument,(void**)&pXMLDoc);//得到关于IXMLDOMNode接口的指针pXDN。

hr=pXMLDoc->QueryInterface(IID_IXMLDOMNode,(void**)&pXDN);在MSXML解析器使用过程中,我们可以使用文档中的createElement方法来创建一个节点装载和保存XML文件。

通过load或者是loadXML方法可以从一个指定的URL来装载一个XML文档。

Load(LoadXML)方法带有两个参数:第一个参数xmlSource表示需要被解析的文档,第二个参数isSuccessful表示文档装载是否成功。

Save方法是用来把文档保存到一个指定的位置。

Save方法有一个参数destination用来表示需要保存的对象的类型,对象可以是一个文件,一个ASP Response方法,一个XML文档对象,或者是一个能够支持持久保存(persistence)的客户对象。

下面是save方法使用的一个简单的例子(具体程序请参见/swm/200101/利用MSXML解析XML文本)。

同时,在解析过程中,我们需要得到和设置解析标志。

利用不同的解析标志,我们可能以不同的方法来解析一个XML文档。

XML标准允许解析器验证或者不验证文档,允许不验证文档的解析过程跳过对外部资源的提取。

另外,你可能设置标志来表明你是否要从文档中移去多余的空格。

为了达到这个目的,DOMDocument对象暴露了下面几个属性,允许用户在运行的时候改变解析器的行为:(1)Async(相对于C++是两个方法,分别为get_async和put_async)(2)ValidateOnparse (相对于C++是两个方法,分别为get_validateOnParse和put_validateOnParse)(3)ResolveExternals(相对于C++是两个方法,分别为get_ ResolveExternals和put_ ResolveExternals)(4)PersercveWhiteSpace(相对于C++是两个方法,分别为get_ PersercveWhiteSpace和put_ PersercveWhiteSpace)每一个属性可以接受或者返回一个Boolean值。

缺省的,anync,validateOnParse,resolveExternals的值为TRUE,perserveWhiteSpace的值跟XML文档的设置有关,如果XML文档中设置了xml:space属性的话,该值为FALSE。

相关文档
最新文档