XML 中的嵌入式表达式
更新:2007 年 11 月
使用嵌入式表达式可以创建包含在运行时计算的表达式的 XML 文本。嵌入式表达式的语法是 <%= expression %>,该语法与 ASP.NET 中使用的语法相同。
例如,可以将嵌入式表达式与文本内容组合在一起,以创建 XML 元素文本。
Dim isbnNumber As String = "12345"
Dim modifiedDate As String = "3/5/2006"
Dim book As XElement = _
<book category="fiction" isbn=<%= isbnNumber %>>
<modifiedDate><%= modifiedDate %></modifiedDate>
</book>
如果 isbnNumber 包含整数 12345 而 content 包含字符串“Book of the week”,则当此代码执行时,book 的值为:
<book category="fiction" isbn="12345">Book of the week</book>
嵌入式表达式位置和验证
嵌入式表达式只能出现在 XML 文本表达式中的某些位置上。表达式位置控制表达式可以返回的类型和 Nothing 的处理方式。下表介绍允许使用的嵌入式表达式位置和类型。
在文本中的位置 |
表达式类型 |
对 Nothing 的处理 |
---|---|---|
XML 元素名称 |
错误 |
|
XML 元素内容 |
Object 或 Object 的数组 |
忽略 |
XML 元素属性名称 |
错误,除非属性值也为 Nothing |
|
XML 元素属性值 |
Object |
忽略属性声明 |
XML 元素属性 |
XAttribute 或 XAttribute 的集合 |
忽略 |
XML 文档根元素 |
XElement,或包含一个 XElement 对象和任意数量的 XProcessingInstruction 和 XComment 对象的集合 |
忽略 |
XML 元素名称中的嵌入式表达式的示例:
Dim elementName As String = "contact" Dim contact1 As XElement = <<%= elementName %>/>
XML 元素内容中的嵌入式表达式的示例:
Dim contactName As String = "Patrick Hines" Dim contact2 As XElement = _ <contact><%= contactName %></contact>
XML 元素属性名称中的嵌入式表达式的示例:
Dim phoneType As String = "home" Dim contact3 As XElement = _ <contact <%= phoneType %>="206-555-0144"/>
XML 元素属性值中的嵌入式表达式的示例:
Dim phoneNumber As String = "206-555-0144" Dim contact4 As XElement = _ <contact home=<%= phoneNumber %>/>
XML 元素属性中的嵌入式表达式的示例:
Dim phoneAttribute As XAttribute = _ New XAttribute(XName.Get(phoneType), phoneNumber) Dim contact5 As XElement = _ <contact <%= phoneAttribute %>/>
XML 文档根元素中的嵌入式表达式的示例:
Dim document As XDocument = _ <?xml version="1.0"?><%= contact1 %>
如果启用了 Option Strict,则编译器会检查每个嵌入式表达式的类型是否扩大为所需类型。唯一的例外是 XML 文档的根元素,该元素在代码运行时进行验证。如果在不启用 Option Strict 的情况下进行编译,则可以嵌入类型为 Object 的表达式,这些表达式的类型在运行时进行验证。
在内容可选的位置中,会忽略包含 Nothing 的嵌入式表达式。这意味着在使用 XML 文本之前,不一定要确认元素内容、属性值和数组元素不是 Nothing。必需的值(如元素和属性名称)不能为 Nothing。
有关在特定类型的文本中使用嵌入式表达式的更多信息,请参见 XML 文档文本和 XML 元素文本。
限定规则的应用范围
编译器将每个 XML 文本都转换为对相应文本类型的构造函数的调用。XML 文本中的文本内容和嵌入式表达式作为参数传递给构造函数。这意味着,可在 XML 文本中使用的所有 Visual Basic 编程元素也都可在其嵌入式表达式中使用。
在 XML 文本中,可以访问使用 Imports 语句声明的 XML 命名空间前缀。通过 xmlns 属性,可以在元素中声明新的 XML 命名空间前缀,也可以隐藏现有的 XML 命名空间前缀。新的命名空间可用于该元素的子节点,但不可用于嵌入式表达式中的 XML 文本。
说明: |
---|
在使用 xmlns 命名空间属性声明 XML 命名空间前缀时,该属性值必须为常量字符串。在这一点上,使用 xmlns 属性声明 XML 命名空间与使用 Imports 语句进行声明类似。不能使用嵌入式表达式指定 XML 命名空间值。 |