Xml日志记录文件最优方案2013-11-28 博客园 JasenKinXml作为数据存储的一种方式,当数据非常大的时候,我们将碰到很多Xml处理的问题。通常,我们对Xml文 件进行编辑的最直接的方式是将xml文件加载到XmlDocument,在内存中来对XmlDocument进行修改,然后再保 存到磁盘中。这样的话我们将不得不将整个XML document 加载到内存中,这明显是不明智的(对于大数据XML 文件来说,内存将消耗很大,哥表示鸭梨很大)。下面我们将要讲的是如何高效的增加内容(对象实体内容) 到xml日志文件中。(一)设计概要总体来说,我们将(通过代码)创建两种不同的文件,第 一种为Xml文件,第二种为xml片段(txt文件),如下图所示:

我们通过如下的定义来使2个不同的文件相关联。<!ENTITY yourEntityRefName SYSTEM "your xml fragement address(relative or obsolute address) ">(二)xml 文件的生成先来看下如何创建相关的xml文件,代码如下:
private static void InitXmlFile(string xmlLogFilePath, string xmlLogContentFileName, string entityRef){string docType = string.Format("
<!DOCTYPE XmlLogFile
[
<!ENTITY {0} SYSTEM "{1}">
]>
", entityRef, xmlLogContentFileName);XmlWriterSettings wrapperSettings = new XmlWriterSettings(){Indent = true};using (XmlWriter writer = XmlWriter.Create(xmlLogFilePath, wrapperSettings)){writer.WriteStartDocument();writer.WriteRaw(docType);writer.WriteStartElement(ConfigResource.XmlLogFile);writer.WriteStartElement(ConfigResource.XmlLogContent);writer.WriteEntityRef(entityRef);writer.WriteEndElement();writer.WriteEndElement();writer.Close();}}对xml文件内容的写入主要通过XmlWriter来进行操作的。这个方法比较简单,不再讲解,看下我们通过这 个方法生成的文件内容:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE XmlLogFile[<!ENTITY Locations SYSTEM "XmlLogContentFile-20110220000120.txt"> ]><XmlLogFile><XmlLogContent>&Locations;</XmlLogContent></XmlLogFile>
Locations 为实体引用名称,与之相对应的为&Locations; 。XmlLogContentFile-20110220000120.txt为Xml片段的文件名称,路径是相对于XmlLogFile- 20110220000120.xml的。&Locations;相当于占位符的作用,将用XmlLogContentFile- 20110220000120.txt文件的内容来替换XmlLogFile-20110220000120.xml的&Locations;