XML 已经成为一种流行的数据格式,其原因很多,对于大多数人来说,这是一种很方便表示数据的格式,文件有可读性。程序员的处理文件既有非结构化的,即不遵循一种模式,或者是结构化的,即数据符合 XSD 架构定义的约定;还希望方便地用 XPath 查询数据,即,为了处理一种新的数据格式而编写自定义的解析程序,很少需要,文件可以在不同的 XML 格式之间快速转换,用强大的 XSLT 语言转换数据。
System.Xml 命名空间处理 XML 文件的类所有的方法很多,有这里描述的,但不止这些,我们将学习的方法是处理 XML 文件时最常用的,W3C 推荐的 .NET 实现的XML 文档对象模型(Document Object Model,DOM),它通常用类 XmlDocument 表示。这节的第一个例子将读取下面的 XML 文件fruits.xml:
<fruits>
<apples>2</apples>
<oranges>3</oranges>
<bananas>1</bananas>
</fruits>
下面的代码加载 fruits.xml,绑定到标识符 fruitsDoc,然后,用一个循环显示数据:
open System.Xml
// create an xml dom object
let fruitsDoc =
let temp = new XmlDocument()
temp.Load("fruits.xml")
temp
// select a list of nodes from the xml dom
let fruits =fruitsDoc.SelectNodes("/fruits/*")
// print out the name and text from eachnode
for x in fruits do
printfn "%s = %s " x.Namex.InnerText
前面代码的运行结果如下:
apples = 2
oranges = 3
bananas = 1
下一个例子演示了如何构建 XML 文档,并写到磁盘。假设有一组数据,绑定到标识符 animals,准备把它写成 XML 文件 animals.xml。先创建一个新的 XmlDocument 对象,然后构建文档,调用 XmlDocument 实例成员 CreateElement 方法创建根结点,用 AppendChild 方法追加文档对象。通过枚举 animals 列表,构建文档的其余部分,创建并追加结点。
open System.Xml
// create an xml dom object
let fruitsDoc =
lettemp = new XmlDocument()
temp.Load("fruits.xml")
temp
// select a list of nodes from the xml dom
let fruits =fruitsDoc.SelectNodes("/fruits/*")
// print out the name and text from eachnode
for x in fruits do
printfn"%s = %s " x.Name x.InnerText
运行代码,创建了 animals.xml 文件,其内容如下:
<animals>
<ants>6</ants>
<spiders>8</spiders>
<cats>4</cats>
</animals>
System.Xml 命名空间很大,有许多操作 XML 数据的类,表 9-1 是其中最有用的部分。
表 9-1 System.XML 命名空间中有用的类
类 |
描述 |
System.Xml.XmlDocument |
W3C 的 XML DOM 的 Microsoft .NET 实现。 |
System.Xml.XmlNode |
这个类不能直接创建,但经常使用,它是XmlDocument 的 SelectSingle 结点方法的结果。 |
System.Xml.XmlNodeList |
这个类是结点的集合,是 XmlDocument 的SelectNode方法的结果。 |
System.Xml.XmlTextReader |
它提供了向前、只读 XML 文档。虽然使用不如XmlDocument 类那样方便,但不要求把整个文档加载到内存;当处理大文档时,使用这个类通常比 XmlDocument 有更好的性能。 |
System.Xml.XmlTextWriter |
它提供了向前、写 XML 文档。如果 XML 文档必须从头开始,这通常是最容易的方法。 |
System.Xml.Schema .XmlSchema |
它提供了加载 XML 架构到内存的方法,然后,用户能够用它来验证 XML 文档。 |
System.Xml.Serialization .XmlSerializer |
实现在 .NET 对象与 XML 之间序列化。然而,它只能序列化公开字段,而 BinarySerializer 还可以用于框架中的其他地方。 |
System.Xml.XPath .XPathDocument |
处理 XPath 表达式最有效的方法。注意,这个类仅是 XML文档的包装,必须使用 XPathExpression 和XPathNavigator 才能工作。 |
System.Xml.XPath .XPathExpression |
表示用于 XPathDocument 的 XPath 表达式,它可以被编译,重复使用时更有效。 |
System.Xml.XPath .XPathNavigator |
按照 XPathDocument 执行 XPathExpression以后,这个类能够浏览结果;它的优势在于一次只抽取一个结点到内存,因此,在内存使用上更有效。 |
System.Xml.Xsl.XslTransform |
使用 XSLT 样式表转换 XML。 |
System.Xml 命名空间