以下示例中的卷曲括号{}是什么意思 (在前面的行中,变量$ fieldName被初始化并用字符串填充):
<xsl:element name="{$fieldName}">
<xsl:apply-templates select="field"/>
</xsl:element>
答案 0 :(得分:33)
只要您需要在属性中计算表达式,就可以使用这些花括号(属性值模板),否则这些表达式会将内容视为文本。
例如,假设您有一个XML源:
<link site="www.stackoverflow.com"/>
并且您希望从中生成HTML链接,如
<a href="http://www.stackoverflow.com">Click here</a>
如果您只是将@site
的内容读入href
属性,请执行以下操作:
<xsl:template match="link">
<a href="http://@site">Click here</a>
</xsl:template>
它不起作用,因为它将被视为纯文本,你会得到:
<a href="http://@site">Click here</a>
但是如果你将@site
包裹在花括号中:
<xsl:template match="link">
<a href="http://{@site}">Click here</a>
</xsl:template>
它将被视为XPath,将被执行,您将得到:
<a href="http://www.stackoverflow.com">Click here</a>
如果不是大括号,则需要在<xsl:attribute>
中使用包含<a>
的{{1}}来获得相同的结果:
<xsl:value-of>
在您的示例中,<xsl:template match="link">
<a>
<xsl:attribute name="href">
<xsl:text>http://</xsl:text><xsl:value-of select="@site"/>
</xsl:attribute>
<xsl:text>Link</xsl:text>
</a>
</xsl:template>
name
atrribute需要一个字符串。要将该字符串视为XPath表达式并将其替换为变量<xsl:element>
的结果,您可以将其放在花括号中,或者使用上面的$fieldName
元素:
<xsl:attribute>
答案 1 :(得分:6)
这些被称为Attribute Value Templates
。有关详细信息,请参阅此处w3.org
定义:在指定为属性值的属性中 模板,例如文字结果元素的属性, 表达式可以通过用curly包围表达式来使用 括号({})。
属性值模板由交替序列组成 固定部件和可变部件。可变部分由XPath组成 用大括号({})括起来的表达式。固定部分可能包含 任何字符,但左侧花括号必须写为{{ 并且右侧花括号必须写成}}。
答案 2 :(得分:3)
这有点难以找到,但在Creating Elements with xsl:element
中进行了讨论。
xsl:element元素允许使用计算名称[从表达式]创建元素。要创建的元素的扩展名由必需的name属性指定。
虽然此处未明确讨论{}
语法,但在其他上下文中也使用了大括号的含义,例如Creating Elements and Attributes,并且也适用于此处。
文字结果元素的属性值被解释为属性值模板:它可以包含花括号({})中包含的 [XPath]表达式。
在这种情况下,$fieldName
只是一个变量的XPath表达式,它应该计算为有效的元素名称。