XML 表达式和模式
作者:Burak Emir
本章描述了 XML 表达式和模式的语法结构。它尽可能地遵循 XML 1.0 规范,更改是由嵌入 Scala 代码片段的可能性所强制的。
XML 表达式
XML 表达式是由以下产生式生成的表达式,其中第一个元素的起始括号 <
必须位于可以开始词法 XML 模式 的位置。
XML 规范的良好格式约束适用,这意味着例如起始标签和结束标签必须匹配,并且属性只能定义一次,除了与实体解析相关的约束。
以下产生式描述了 Scala 的可扩展标记语言,其设计尽可能接近 W3C 可扩展标记语言标准。只有属性值和字符数据的产生式发生了改变。Scala 不支持声明。实体引用在运行时不会被解析。
如果 XML 表达式是一个单一元素,则其值为 XML 节点的运行时表示(scala.xml.Node
的子类的实例)。如果 XML 表达式包含多个元素,则其值为 XML 节点序列的运行时表示(scala.Seq[scala.xml.Node]
的子类的实例)。
如果 XML 表达式是实体引用、CDATA 部分、处理指令或注释,则它由相应的 Scala 运行时类的实例表示。
默认情况下,元素内容中的开头和结尾空格会被移除,连续出现的空格会被替换为单个空格字符 \u0020
。可以通过编译器选项更改此行为以保留所有空格。
XML 表达式可以包含 Scala 表达式作为属性值或在节点内。在后一种情况下,它们使用单个左大括号 {
嵌入,并以右大括号 }
结束。要表达由 CharData 生成的 XML 文本中的单个左大括号,必须将其加倍。因此,{{
代表 XML 文本 {
,不会引入嵌入的 Scala 表达式。
XML 模式
XML 模式是由以下产生式生成的模式,其中元素模式的左尖括号 <
必须位于开始词法 XML 模式 的位置。
XML 规范的良好格式约束适用。
XML 模式必须是单个元素模式。它精确匹配那些具有与模式描述相同的结构的 XML 树的运行时表示。XML 模式可以包含 Scala 模式。
空格的处理方式与 XML 表达式中相同。
默认情况下,元素内容中的开头和结尾空格会被移除,连续出现的空格会被替换为单个空格字符 \u0020
。可以通过编译器选项更改此行为以保留所有空格。