NanoXML - 简单快速的 XML 解析器






4.97/5 (9投票s)
简单快速的 .NET XML 解析器,不使用 System.Xml
引言
这是一个在 .NET 平台(使用 .NET 2.0)上相当小巧且快速的 XML DOM 解析器。其主要特性和主要需求是不使用 System.Xml
命名空间。 此外,测试结果显示与内置 .NET 解析器相比,性能非常出色。
背景
这个想法的诞生源于我的一个朋友需要在 C# 中解析 XML,而无需使用 System.Xml
命名空间。编写和测试大约花费了三个小时。该解析器不支持完整的 XML 规范,但它可以解析我尝试过的大多数 XML。
使用代码
使用 NanoXML 很简单。你只需要将 NanoXMLParser.cs 添加到你的项目中,并使用 TObject.Shared
命名空间。主要的顶级类是 NanoXMLDocument
,它解析 XML 并构建 DOM。
NanoXML 无法从文件加载数据,因此你可能需要将 XML 字符串与你的应用程序本身一起加载。例如:
FileStream fs = new FileStream(args[0], FileMode.Open, FileAccess.Read);
byte[] data = new byte[fs.Length];
fs.Read(data, 0, (int) fs.Length);
fs.Close();
string strData = Encoding.UTF8.GetString(data);
NanoXMLDocument xml = new NanoXMLDocument(strData);
是的,NanoXML 忽略 XML 声明的编码属性 现在,在加载文档后,我们可以获取任何元素或其任何属性的数据:
string myAttribute = xml.RootNode["Subnode"].GetAttribute("myAttribute");
NanoXML 还会忽略注释和 DOCTYPE 声明。XML 声明(<?xml ?>
)将被解析并存储在 NanoXMLDocument
对象中。
性能
这个解析器最令人惊叹的地方在于它的性能。在提交代码之前,我尝试对解析器进行了一些基准测试,并将其与内置 .NET 解析器进行比较,我感到很惊讶。所有测试均在 1.1 MB SVG 文件中以字符串形式进行(即,没有磁盘访问开销)。测试结果如下所示:
正如我们所见,NanoXML 几乎立即处理了 1.1 MB 的文件(17 毫秒)。XmlDocument 加载文档用了 11 秒。XmlReader(一种 SAX 解析器,其设计应该比 DOM 快得多)读取整个文档大约需要 7 秒。对于 XmlReader,测试只是从头到尾读取文件内容。基准测试源代码可供下载。
兴趣点
由于其出色的性能,或者在使用内置解析器(System.Xml
命名空间)被禁止时,此解析器可能很有用。