当前位置导航:炫浪网>>网络学院>>网页制作>>XML/WebService教程

XLINQ : XML字面量和XML后期绑定

  XML 作为一种通用的,跨平台的数据交换格式,在程序界是公认的事实;而 .Net Framework 以前的版本中麻烦的 XML 操作,常常令程序员心生不快。记得以前试图生成一个 XML 文件,无非是两种模式:用 StringBuilder 拼接 XML 字符串,或者是用 XMLDocument / XMLWriter 进行 DOM 操作。StringBuilder 是有足够的速度,但是没有稳定性的保障,需要多次过滤以保护 XML 文件的完整性。而使用 MSXML 的包装 System.Xml 进行操作,又未免太麻烦了些。

  XML 字面量功能是 Visual Basic 9 为解放程序员劳力作出的一项非常大的改进,它可让程序员直接在代码中嵌入 XML 进行生成操作。借助编译器的力量,XML 字面量调用 System.Xml.Linq 进行 XML 的动态生成。在 C# 中,虽然同样可以调用这个命名空间下的类进行生成,但是远没有 Visual Basic 的模式轻松,省力。举一个简单的范例,用于动态生成一个 XML 文档:

  旧的 String Builder 模式:

Imports System.Text
Public Function BuildXMLFromStringBuilder()
Function BuildXMLFromStringBuilder(Name As String, Age As Integer) As String Dim XMLBuilder As New StringBuilder With XMLBuilder .AppendLine("<Person>") .Append("<Name>") .Append(Name) .AppendLine("</Name>") .Append("<Age>") .Append(Age) .AppendLine("</Age>") .AppendLine("</Person>") End With Return XMLBuilder.ToString() End Function

  旧的 XML DOM 模式:

Public Function BuildXMLFromXmlDom()
Function BuildXMLFromXmlDom(ByVal Name As String, ByVal Age As Integer)
As String Dim XMLDocument As New XmlDocument Dim RootElement As XmlElement = XMLDocument.CreateElement("Person") Dim NameElement As XmlElement = XMLDocument.CreateElement("Name") Dim AgeElement As XmlElement = XMLDocument.CreateElement("Age") With RootElement .AppendChild(NameElement) .AppendChild(AgeElement) End With With NameElement .Value = Name End With With AgeElement .Value = CStr(Age) End With XMLDocument.AppendChild(RootElement) Return XMLDocument.ToString() End Function

  新的 XML 字面量:

Public Function BuildXMLFromXLinq()
Function BuildXMLFromXLinq(ByVal Name As String, ByVal Age As Integer)
As String Return <Person> <Name><%= Name %></Name> <Age><%= Age %></Age> </Person>.ToString() End Function

  前两个示例可以在 Visual Basic 8 中编译通过;第三个示例则需要 Visual Basic 9 的支持。很显然,XLinq 确实可以解放程序员的工作劳力,并且效率不逊于第二种方式。这一点将在我的另一个系列中得到印证。如果各位曾经使用过 ASP,或者在 ASP.net 中使用过类似 ASP 的语法,将会感到非常亲切 - <%=%> 的语法模式又回来了!不过这一次可不再是生成网页了。另外,在书写 XML 的过程中,您不需要使用换行符,直到最后一个 XML 标签被关闭。

  您甚至可以在 XML 字面量中使用集成的 LINQ 查询,藉以循环生成 XML Element 列表:

Public Function BuildXMLFromXLinqExtended()
Function BuildXMLFromXLinqExtended() As String Dim Cities As String() = {"London", "Beijing", "Paris", "Fuzhou"} Return <Cities> <%= From City In Cities _ Select <City><%= City %></City> %> </Cities>.ToString End Function

  事实上,XLinq 能做到的不仅仅是创建一个 XML 文档,它还完成了 XML == Objects 的工作,亦即 Linq To Xml.诸如 Persons.<Person>.<Name>.First 这样的语法完全可以替代 XPath;虽然顽固的我现在还是坚持着 XPath.

相关内容
赞助商链接