xml 文件解析方法
2012-05-21 17:54
253 查看
转载自:/article/5546306.html
内容提要
1.解析Xml文件有哪些方法?各有什么优缺点?
2.如何用XPath解析xml文档的要点。
先来看看解析xml文件的方法都有哪些吧,本段文字来自网络,可以帮助大家对这个问题有个概要的了解。
在程序中访问并操作XML文件一般有两种模型:流模型和DOM(文档对象模型)。流模型中有两种变体——“推”模型和“拉”模型。
“推”模型也就是常说的SAX,SAX是一种靠事件驱动的模型。它每发现一个节点就用“推”模型引发一个事件,而我们必须编写这些事件的处理程序,很麻烦。
.NET中使用的是基于“拉”模型的实现方案。 “拉”模型在遍历文档时会把感兴趣的文档部分从读取器中拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的提高了灵活性,“拉”模型可以选择性的处理节点。在.NET中,“拉”模型通过XML阅读器(XMLTextReader类)来实现的。该类提供Xml文件读取的功能,它可以验证文档是否格式良好,如果不是格式良好的Xml文档,该类在读取过程中将会抛出XmlException异常。任何时候在内存中只有当前节点,但它是只读的,向前的,不能在文档中执行向后导航操作。
DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询。但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。在.NET中使用XML DOM分析器(XMLDocument)实现DOM模型。
因此,.NET Framework完全支持XML DOM模式,但它不支持SAX模式。.NET Framework支持两种不同的分析模式:XML DOM分析器(XMLDocument类)和XML阅读器(XMLTextReader类),不支持SAX分析器, 但这并不意味着它没有提供类似SAX分析器的功能。通过XML阅读器可以将SAX的所有的功能很容易的实现及更有效的运用。
在项目中,我们选用xpath的方式来解析xml文档。这是基于以下的几点原因:
1, 文件大小。要处理的文件不大,一般都在几百K到1M。
2, XPath的灵活性。不需要获取文档的全部数据,只需要获取大部分想要的数据。
3, 学习代价低。符合一般的思维习惯,通过Path获取结果。
通过XPath的方式解析xml文档,需要先加载文档,然后再读取想要的节点值。
xml文档
protected XmlDocument doc = null;
xml文档的根元素(节点)
protected XmlElement root = null;
xml文档的名空间管理器
protected XmlNamespaceManager nsmgr = null;
接下来就是加载文档了
View Code
当然,这里也可以获取节点属性的值,查找满足特定值的节点等等,这些和上面获取节点值的过程是类似的。这里推荐一篇介绍xpath的文章XPath 教程,大家不妨看看,关于xpath的常见问题都可以得到解决。
内容提要
1.解析Xml文件有哪些方法?各有什么优缺点?
2.如何用XPath解析xml文档的要点。
先来看看解析xml文件的方法都有哪些吧,本段文字来自网络,可以帮助大家对这个问题有个概要的了解。
在程序中访问并操作XML文件一般有两种模型:流模型和DOM(文档对象模型)。流模型中有两种变体——“推”模型和“拉”模型。
“推”模型也就是常说的SAX,SAX是一种靠事件驱动的模型。它每发现一个节点就用“推”模型引发一个事件,而我们必须编写这些事件的处理程序,很麻烦。
.NET中使用的是基于“拉”模型的实现方案。 “拉”模型在遍历文档时会把感兴趣的文档部分从读取器中拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的提高了灵活性,“拉”模型可以选择性的处理节点。在.NET中,“拉”模型通过XML阅读器(XMLTextReader类)来实现的。该类提供Xml文件读取的功能,它可以验证文档是否格式良好,如果不是格式良好的Xml文档,该类在读取过程中将会抛出XmlException异常。任何时候在内存中只有当前节点,但它是只读的,向前的,不能在文档中执行向后导航操作。
DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询。但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。在.NET中使用XML DOM分析器(XMLDocument)实现DOM模型。
因此,.NET Framework完全支持XML DOM模式,但它不支持SAX模式。.NET Framework支持两种不同的分析模式:XML DOM分析器(XMLDocument类)和XML阅读器(XMLTextReader类),不支持SAX分析器, 但这并不意味着它没有提供类似SAX分析器的功能。通过XML阅读器可以将SAX的所有的功能很容易的实现及更有效的运用。
在项目中,我们选用xpath的方式来解析xml文档。这是基于以下的几点原因:
1, 文件大小。要处理的文件不大,一般都在几百K到1M。
2, XPath的灵活性。不需要获取文档的全部数据,只需要获取大部分想要的数据。
3, 学习代价低。符合一般的思维习惯,通过Path获取结果。
通过XPath的方式解析xml文档,需要先加载文档,然后再读取想要的节点值。
xml文档
protected XmlDocument doc = null;
xml文档的根元素(节点)
protected XmlElement root = null;
xml文档的名空间管理器
protected XmlNamespaceManager nsmgr = null;
接下来就是加载文档了
View Code
<?xml version="1.0" encoding="UTF-8" ?> <Root xmlns="urn:ClassNameSpace"> <Class> <ClassID>1234</ClassID> </Class> <Students> <Student> <ID>01</ID><Name>Name01</Name> </Student> <Student> <ID>02</ID><Name>Name02</Name> </Student> </Students> </Root>
当然,这里也可以获取节点属性的值,查找满足特定值的节点等等,这些和上面获取节点值的过程是类似的。这里推荐一篇介绍xpath的文章XPath 教程,大家不妨看看,关于xpath的常见问题都可以得到解决。
相关文章推荐
- XML解析文件出错解决方法
- c#中XML解析文件出错解决方法
- Android 解析XML 文件的四种方法总结
- c#中XML解析文件出错解决方法
- C#解析 居委会的 XML 文件方法
- java之XML文件的解析方法Dom4j
- Python使用XPATH解析特定结构XML文件速度提升方法
- java中采用集合使用pull解析xml文件格式的方法
- 大XML文件解析入库的一个方法
- android编程之XML文件解析方法详解(附源码)
- php的SimpleXML方法读写XML接口文件实例解析
- Android开发之XML文件的解析的三种方法
- XML文件解析---SAX方法
- Android开发之XML文件的解析的三种方法
- XML文件解析—System.Xml的一些方法
- php的SimpleXML方法读写XML接口文件实例解析
- Android开发之XML文件的解析的三种方法
- xml配置文件不能被正确解析的特殊符号的处理方法
- 读写文件的几种方法std::fstream、fopen操作;解析XML方法:pugi、QDomDocument
- 通过XML解析,对pandas的DataFrame.append()的思考及对大文件解析加速的方法