XML 中的嵌入式表达式 (Visual Basic)

使用嵌入式表达式可以创建包含在运行时计算的表达式的 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 且 modifiedDate 包含日期 3/5/2006,则执行此代码时,book 的值为:

<book category="fiction" isbn="12345">  
  <modifiedDate>3/5/2006</modifiedDate>  
</book>  

嵌入式表达式的位置和验证

嵌入式表达式只能出现在 XML 文本表达式中的特定位置。 表达式位置控制了表达式可返回的类型以及 Nothing 的处理方式。 下表描述了允许的嵌入式表达式位置和类型。

在文本中的位置 表达式的类型 Nothing 处理
XML 元素名称 XName 错误
XML 元素内容 Object,或 Object 的数组 忽略
XML 元素属性名称 XName 错误,除非属性值也是 Nothing
XML 元素属性值 Object 忽略属性声明
XML 元素属性 XAttribute,或 XAttribute 的集合 忽略
XML 文档根元素 XElement,或一个 XElement 对象和任意数量的 XProcessingInstructionXComment 对象的集合 忽略
  • 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 属性类似于使用 Imports 语句来声明 XML 命名空间。 不能使用嵌入式表达式来指定 XML 命名空间值。

另请参阅