【IT168技术文档】
用于 XML 的 .NET 语言集成查询 (XLinq) 允许使用标准查询操作符以及特定于树的操作符(提供类似于 XPath 的子代、父代和同辈导航)来查询 XML 数据。它提供了有效的 XML 内存中表示形式,该表示形式与现有的 System.Xml 读取器/写入器基础结构集成在一起,比 W3C 文档更易于使用。将 XML 与查询相集成的大部分工作由以下三个类型执行:XName、XElement 和 XAttribute。
XName 提供一种易于使用的方法来处理命名空间限定的标识符 (QName)(既用作元素又用作属性名)。XName 可以透明地处理高效的标识符原子化,并在需要 QName 时允许使用符号或纯字符串。
XML 元素和属性分别通过 XElement 和 XAttribute 表示。XElement 和 XAttribute 支持普通的结构语法,以允许开发人员使用自然语法编写 XML 表达式:
var e = new XElement("Person",
new XAttribute("CanCode", true),
new XElement("Name", "Loren David"),
new XElement("Age", 31));
var s = e.ToString();
这对应于以下 XML:
<Person CanCode="true"> ? <Name>Loren David</Name> ? <Age>31</Age> </Person>
请注意,创建 XML 表达式不需要基于 DOM 的工厂模式,并且 ToString 实现会生成 XML 文本。XML 元素还可以从现有的 XmlReader 或字符串文字生成:
var e2 = XElement.Load(xmlReader);
var e1 = XElement.Parse(
@"<Person CanCode='true'>
<Name>Loren David</Name>
<Age>31</Age>
</Person>");
XElement 还支持使用现有的 XmlWriter 类型发出 XML。
XElement 与查询操作符吻合,从而允许开发人员针对非 XML 信息编写查询,以及通过将 XElements 构建到 select 子句的正文中来生成 XML 结果:
var query = from p in people
where p.CanCode
select new XElement("Person",
new XAttribute("Age", p.Age),
p.Name);
该查询将返回一个 XElement 序列。要允许 XElement 的生成超出这种类型的查询结果,XElement 构造函数应允许将元素序列直接作为参数进行传递:
var x = new XElement("People",
from p in people
where p.CanCode
select
new XElement("Person",
new XAttribute("Age", p.Age),
p.Name));
该 XML 表达式将生成以下 XML:
<People>
<Person Age="11">Allen Frances</Person>
<Person Age="59">Connor Morgan</Person>
</People>
上述语句可以直接转换为 Visual Basic。但是,Visual Basic 9.0 还支持使用 XML 文字,这允许直接从 Visual Basic 使用声明性 XML 语法来表达查询表达式。上面的示例可以通过以下 Visual Basic 语句生成:
Dim x = _
<People>
Select <Person Age=(p.Age) >p.Name</Person> _
From p In people _
Where p.CanCode
</People>