libxml(一)
摘要
Libxml是一个有免费许可的用于处理XML、可以轻松跨越多个平台的C语言库。这个指南提供它的基本函数的例子。
绪论
Libxml是一个实现读、创建及操纵XML数据功能的C语言库。这个指南提供例子代码并给出它基本功能的解释。在这个项目的主页上有Libxml及更多关于它可用的资料。包含有完整的API文档。这个指南并不能替代这些完整的文档,但是阐明功能需要使用库来完成基本操作。
这个指南基于一个简单的XML应用,它使用我写的一篇文章生成,它包含有元数据和文章的主体。
本指南中的例子代码示范如何做到:
• 解析文档
• 取得指定元素的文本
• 添加一个元素及它的内容
• 添加一个属性
• 取得一个属性的值
例子的完整代码包含在附录中
数据类型
Libxml定义了许多数据类型,我们将 ......
XML是门学问。要学的话。也需要用心。
简单的了解下。。
例子:所有节点字段几乎自己构造。
<?xml version="1.0" encoding="utf-8" ?><!--这个是标识。。指定版本。。指定编码读写>
<ShowList>
<Movie>
<Name>功夫</Name>
<Poster>gongfu.jpg</Poster>
<Director>周星驰</Director>
<Actor>周星驰</Actor>
<Type>Action</Type>
<Price>60</Price>
<Schedule>
<Item>8-00 9-45</Item>
<Item>10-00 11-45</Item>
</Schedule>
</Movie>
<Movie>
<Name>疯狂的石头</Name>
<Poster>bone.jpg</Poster>
<Director>宁浩</Director>
<Actor>郭涛</Actor>
<Type>Comedy</Type>
<Price>60</Price ......
XML文件作为数据数据存储介质的一种,好处在于:任何的系统均可以解析它。
XML全称:Extensible Markup Language(扩展标记语言)使用文档类型定义(DTD)或者模式(Schema)来描述数据的。可供人阅读,而且还基于一种公共的开发标准。
最近由于开发的需要,也是研究以下XML的操作,本篇日志主要总结C#.NET中是如何操作XML文件的。
.NET Framework为我们提供了操作XML文件的类,主要封装在System.Xml命名空间中。
接下来我们看看如何通过程序来访问XML文件:
主要是利用System.Xml.XmlDocument类以及一些相关类来完成访问数据过程。
请大家自己去了解一下XML的结构,在这里不做讲述。
System.Xml的属性以及方法如下:
InnerText和InnerXml:找到与各自子节点相关的值或者标记;
Value:访问节点的值;
Attributes:获取当前节点的属性集合;
FirstChild、LastChild和ChildNodes:获取第一个节点、最后一个节点或者子节点的集合;
NextSibling和PreviousSibling:立刻访问下一个或上一个同级子节点;
DocumentElement:访问文件的根元素;
Item:获取指定的子节点;
NodeType:指明当前节点的类型;
XmlNodeType:枚举出所有可能的节点类型;
GetElementsByTa ......
XML文件作为数据数据存储介质的一种,好处在于:任何的系统均可以解析它。
XML全称:Extensible Markup Language(扩展标记语言)使用文档类型定义(DTD)或者模式(Schema)来描述数据的。可供人阅读,而且还基于一种公共的开发标准。
最近由于开发的需要,也是研究以下XML的操作,本篇日志主要总结C#.NET中是如何操作XML文件的。
.NET Framework为我们提供了操作XML文件的类,主要封装在System.Xml命名空间中。
接下来我们看看如何通过程序来访问XML文件:
主要是利用System.Xml.XmlDocument类以及一些相关类来完成访问数据过程。
请大家自己去了解一下XML的结构,在这里不做讲述。
System.Xml的属性以及方法如下:
InnerText和InnerXml:找到与各自子节点相关的值或者标记;
Value:访问节点的值;
Attributes:获取当前节点的属性集合;
FirstChild、LastChild和ChildNodes:获取第一个节点、最后一个节点或者子节点的集合;
NextSibling和PreviousSibling:立刻访问下一个或上一个同级子节点;
DocumentElement:访问文件的根元素;
Item:获取指定的子节点;
NodeType:指明当前节点的类型;
XmlNodeType:枚举出所有可能的节点类型;
GetElementsByTa ......
我们今天来讲一下该体系结构中的XmlTextReader类,该类提供对Xml文件进行读取的功能,它可以验证文档是否格式良好,如果不是格式良好的Xml文档,该类在读取过程中将会抛出XmlException异常,可使用该类提供的一些方法对文档节点进行读取,筛选等操作以及得到节点的名称和值,请牢记:XmlTextReader是基于流模型的实现,打个不恰当的比喻,XML文件就好象水源,闸一开水就流出,流过了就流过了不会也不可以往回流。内存中任何时候只有当前节点,你可以使用XmlTextReader类的Read()方法读取下一个节点。好了,说了这么多来看一个例子,编程要注重实际对吧。看代码前先看下运行效果吧!
Example1按纽遍历文档读取数据,Example2,Example3按纽得到节点类型,Example4过滤文档只获得数据内容,Example5得到属性节点,Example6按纽得到命名空间,Example7显示整个XML文档,为此,我专门写一个类来封装以上功能,该类代码如下:
//---------------------------------------------------------------------------------------------------
//XmlReader类用于Xml文件的一般读取操作,以下对这个类做简单介绍:
//
//Attributes(属性):
//listBox: 设置该属性主要为了得到客户 ......
我们今天来讲一下该体系结构中的XmlTextReader类,该类提供对Xml文件进行读取的功能,它可以验证文档是否格式良好,如果不是格式良好的Xml文档,该类在读取过程中将会抛出XmlException异常,可使用该类提供的一些方法对文档节点进行读取,筛选等操作以及得到节点的名称和值,请牢记:XmlTextReader是基于流模型的实现,打个不恰当的比喻,XML文件就好象水源,闸一开水就流出,流过了就流过了不会也不可以往回流。内存中任何时候只有当前节点,你可以使用XmlTextReader类的Read()方法读取下一个节点。好了,说了这么多来看一个例子,编程要注重实际对吧。看代码前先看下运行效果吧!
Example1按纽遍历文档读取数据,Example2,Example3按纽得到节点类型,Example4过滤文档只获得数据内容,Example5得到属性节点,Example6按纽得到命名空间,Example7显示整个XML文档,为此,我专门写一个类来封装以上功能,该类代码如下:
//---------------------------------------------------------------------------------------------------
//XmlReader类用于Xml文件的一般读取操作,以下对这个类做简单介绍:
//
//Attributes(属性):
//listBox: 设置该属性主要为了得到客户 ......
作者:朱金灿
来源:http://blog.csdn.net/clever101/
现在我发现使用Visual Studio的资源编辑器进行编辑资源有着诸多的不便:首先是任何资源的变动一般变动代码,不利于系统维护,其次Visual Studio的资源编辑器的本身的功能有限,也不利于界面美化,三是不利于人员分工,开发人员既要忙实现功能,又要忙准备好的界面素材。对界面实现文件配置化正是解决上面问题的好方法。这次我实现了使用XML文件配置工具栏。这里所谓配置就是工具栏的界面信息如工具栏标题、按钮图片、是否为分隔符都在XML文件保存,程序通过解析XML文件来获取工具栏信息来创建工具栏。这样一旦发现界面不合适可以随时修改配置文件,同时利于人员分工。
具体的做法如下:
1. 在工程的输出目录下有一个SysConfig.xml,作为系统配置文件。其中关于工具栏的配置部分如下:
<AppToolbar valid="1" caption="基础工具">
<ToolButton file="Add.bmp" />
<ToolButton separator="true" />
<ToolButton file="Benchm ......
看结论请直接看下面
今天写生成xml的php。没有用什么XMLDOMNode之类的来生成,而是直接echo出xml的内容。
xml的内容中有一部分的数据是从db中循环取出的,问题就出在这。我发现全部取出数据时,对于生成的xml,simplexml_load_string返回false,即表明生成的xml是非法的。
debug一下,发现取出数据加以限制 limit 8 一下就没有问题,第9个数据一旦取出就会在成xml非法。仔细比对了下第9条数据,终于发现问题所在,数据中包含手动输入的html标签,而且关键问题是这些标签的有些没有关门。。。
/********************看下面即可**********************/
1 xml语法更严格。[start][/start]标签必须成对出现。html的tag没有这么严格。
2 xml中包含有html tag时,会把这些tag当作xml的一部分,所以xml语法检查对html tag也是有效的。
3 要想让xml的语法检查对某一部分不去作用,请用 <![CDATA[和]]> 。
<![CDATA[和]]>是规定的开始和结束,这部分数据不做任何语法检查。例如:
<a><![CDATA[<intro>1.a 2.b</intro>]]></a>
另外,查了下资料,貌似使用XMLDOMNode接口里的text属性,可以直接把html tag作为值给塞到xml中去。 ......
看结论请直接看下面
今天写生成xml的php。没有用什么XMLDOMNode之类的来生成,而是直接echo出xml的内容。
xml的内容中有一部分的数据是从db中循环取出的,问题就出在这。我发现全部取出数据时,对于生成的xml,simplexml_load_string返回false,即表明生成的xml是非法的。
debug一下,发现取出数据加以限制 limit 8 一下就没有问题,第9个数据一旦取出就会在成xml非法。仔细比对了下第9条数据,终于发现问题所在,数据中包含手动输入的html标签,而且关键问题是这些标签的有些没有关门。。。
/********************看下面即可**********************/
1 xml语法更严格。[start][/start]标签必须成对出现。html的tag没有这么严格。
2 xml中包含有html tag时,会把这些tag当作xml的一部分,所以xml语法检查对html tag也是有效的。
3 要想让xml的语法检查对某一部分不去作用,请用 <![CDATA[和]]> 。
<![CDATA[和]]>是规定的开始和结束,这部分数据不做任何语法检查。例如:
<a><![CDATA[<intro>1.a 2.b</intro>]]></a>
另外,查了下资料,貌似使用XMLDOMNode接口里的text属性,可以直接把html tag作为值给塞到xml中去。 ......