修改大型 XML 文件的有效方法

原创 2004年08月16日 16:28:00

引言

随着 XML 成为大型信息源的常用表示格式,开发人员编辑大型 XML 文件时开始遇到问题。对于处理大型日志文件以及经常需要为这些文件追加信息的应用程序,尤其如此。编辑 XML 文件最直接的方法是,将其加载到 XmlDocument 中,在内存中修改文档,然后将其保存回磁盘。但是,这样做意味着要将整个 XML 文档加载到内存中,由于文档太大或应用程序需要的内存不够,这种方法可能会行不通。

这篇论文说明了修改 XML 文档的一些可供选择的方法,这些方法不涉及将文档加载到 XmlDocument 实例中的内容。

使用 XML 包含方法

建议的第一种方法对于向 XML 日志文件追加值最为有用。开发人员面临的常见问题是需要一种能够将新条目简单地追加到日志文件中而不用加载文档的方法。因为 XML 具有良好结构规则,所以使用传统方式(这种方法会因为日志文件格式不正确而结束日志文件)来向 XML 日志文件追加条目通常是非常困难的。

要说明的第一种方法是针对这样的情形,即目的是能够将条目快速地追加到 XML 文档中。这种方法包括创建两个文件。第一个文件是格式正确的 XML 文件,第二个是 XML 片段。格式正确的 XML 文件包括 XML 片段,XML 片段使用 DTD 中声明的 external entity 或者使用 xi:include element 。使用包含文件,通过在进行处理过程中简单地追加到 XML 文件,可以有效地更新文件包含 XML 片段的方法。包含文件和被包含文件的示例如下所示:


logfile-entries.txt 文件包括一个 XML 片段,并且可以使用典型的文件 IO 方法有效地进行更新。下面的代码说明了如何通过将条目追加到文本文件的结尾来将它添加到 XML 日志文件中。


一旦条目被追加到文本文件中,使用传统的 XML 处理方法,就可以处理 XML 日志文件中的条目。下面的代码使用 XPath 遍历了 logfile.xml 中的日志事件,同时列出了它们被访问时的文件以及被访问的文件。


上面的代码导致了下面的输出:


 

更改 XmlReader 为 XmlWriter

在某些情况下,除了只将元素追加到根元素中外,还需要对 XML 文件执行更复杂的操作。例如,要筛选日志文件中的每一个条目,而这些条目在存档到日志文件前不符合某些特殊标准。要完成此任务的一种方法是将 XML 文件加载到 XmlDocument 中,然后通过 XPath 选择感兴趣的事件。但是,这样做涉及将整个文档加载到内存中,如果文档太大,则这种做法会受到限制。另一种选择方法为了这种任务会涉及使用 XSLT,但是由于整个 XML 文档需要保存到内存中,这种方法会和 XmlDocument 方法一样遇到相同的问题。另外,由于开发人员不熟悉 XSLT,了解如何正确使用模板匹配时会遇到较大的困难。

要解决如何处理大型 XML 文档问题的一种方法是使用 XmlReader 读取 XML,读取的同时使用 XmlWriter 将其写出。使用这种方法,整个文档不会同时存入内存中,对 XML 可以进行更精确的更改而不只是追加元素。下面的代码示例读取前面部分的 XML 文档,筛选出所有 ip 元素的值为 "127.0.0.1" 的事件后将其保存为存档文件。


上面的代码示例在写入到 logfile-archive.xml 文件中时会导致下面的输出:


除了使用 XmlReader 到 XmlWriter 的链之外,上面代码的另一个有趣方面是,使用 ReadEvent() 方法检查元素标记名称时使用 NameTable 提高了文本比较的性能。在 XmlReader 中使用这种方法检查元素的标记名称的优点在如下的 MSDN 文档主题中进行了概述:Object Comparison Using XmlNameTable with XmlReader(英文)。

修改大型 XML 文件的有效方法

修改大型 XML 文件的有效方法 发布日期 : 8/12/2004 | 更新日期 : 8/12/2004Dare ObasanjoMicrosoft Corporation摘要:Dare Obasan...
  • starlessnt
  • starlessnt
  • 2008-03-18 13:04:00
  • 322

快速有效的解析大型XML文件

和老师做研究也快一年了。使我认识比较深的是对XML的解析和图论。由于我们做的试验是通过XML来生成图,于是摆在我们面前的首要问题是如何解析XML。              在此之前曾经用过DOM4J...
  • JDream314
  • JDream314
  • 2011-07-20 21:25:24
  • 9097

xml有效性验证

最近在进行xml的有效性验证,发现了一些以前不知道的报错信息。 XML 文档形成一种树结构 XML 文档必须包含根元素。该元素是所有其他元素的父元素。 XML 文档中的元素形成了一棵文档树。...
  • yongche_shi
  • yongche_shi
  • 2016-11-14 13:38:04
  • 846

应用程序——INI和XML配置文件

INI配置文件的格式 为什么要用INI文件?如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序出厂...
  • urecvbnkuhBH_54245df
  • urecvbnkuhBH_54245df
  • 2011-05-23 22:03:00
  • 3745

xml约束模式的作用。简述什么是格式良好但无效的xml文档,什么是有效的

XML约束模式语言 1.XMl约束语言用来创建XML标记语言的语言,这种用于定义另一种的语言被称为元语言。 2.约束模式通常都是在一个单独的文件中进行定义的,这个文件被称作模式文档。 3.与模式...
  • zzqbkfj
  • zzqbkfj
  • 2012-11-07 14:23:30
  • 1227

什么是xml文件

XML:Extentsible Markup Language(可扩展标记语言)的缩 写,是用来定义其它语言的一种元语言,其前身是SGML(标准通用标记语言)。它没有标签集(tag set),也没有语...
  • RuizeMa
  • RuizeMa
  • 2011-01-18 14:27:00
  • 2478

有效的XML文档以及解析技术

有效的XML文档:有效的XML除了要满足XML规范外,还要满足相应DTD和Schema定义的元素规则。            有效的XML一定是格式良好的,但格式良好的XML不一定是有效的 ...
  • zhou814484002
  • zhou814484002
  • 2016-10-18 08:59:51
  • 618

超大XML文件怎么打开

xml文件太大(我的文件有1.5G)会导致普通的编辑器无法打开,原本在Windows系统上安装了sublime text,以为可以打开的,毕竟曾经确实用它打开过,而且mac上也是可以打开的。但这次安装...
  • xqclll
  • xqclll
  • 2016-11-15 10:50:48
  • 3527

ORACLE: 解决“不是有效的导出文件,头部验证失败” , DMP文件版本转换器

现象描述:    1)导出的DMP文件为11g    2)进行IMP导入的客户端是10g    3)目标服务端是11g 解决“不是有效的导出文件,头部验证失败”" title="ORACLE:...
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2014-12-15 15:10:48
  • 1546

python+lxml解析大XML文件(100M+)

用lxml解析类似于下面的infile.xml文件
  • zhihaoma
  • zhihaoma
  • 2016-08-17 15:44:30
  • 849
收藏助手
不良信息举报
您举报文章:修改大型 XML 文件的有效方法
举报原因:
原因补充:

(最多只允许输入30个字)