bra*_*ter 5 xslt variables substitution
我试图使用XSLT变量并没有取得多大成功,希望我只是做一些愚蠢的事情.
我有以下代码片段:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xslt"
version="1.0">
<xsl:template match="/">
<xsl:variable name="config" select="query/@config"></xsl:variable>
Run Code Online (Sandbox Code Playgroud)
所以我希望有一个变量'config'设置为我的顶级元素'query'的'config'属性的值.
然后我尝试在我的样式表中稍后使用该变量,例如:
<a href="localhost/test?go">
{$config}
</a>
Run Code Online (Sandbox Code Playgroud)
但是我在输出HTML文档中看到的输出是:
<a href="localhost/test?go">
{$config}
</a>
Run Code Online (Sandbox Code Playgroud)
所以价值没有像我预期的那样被替换.
我认为这可能是最简单的情况,所以我做了一些愚蠢的事情!请帮忙,谢谢!
更新感谢所有回复的人,我误解了我在属性或外部工作的不同背景.很好地排除了我的问题!
如果可以的话,我会接受两个答案,即我所拥有的答案,以及@Aaron Digulla,它解释了属性的问题.
Way*_*ett 13
这里有两个看似相同的问题,但它们略有不同:1)如何按名称引用变量?2)我在哪里可以通过名称引用变量?
首先,始终使用$varname
语法引用变量.其次,这可以在允许表达的任何地方完成.这是第二部分似乎混淆了.首先,默认情况下,元素或属性的值将按字面输出,因此在以下示例中实际上未引用任何变量:
<element attr="$test">$test or {$test}</element>
Run Code Online (Sandbox Code Playgroud)
输出将完全匹配输入的内容.
要输出变量的值,我们需要在允许表达式的地方引用它.在元素内容中,我们使用xsl:value-of
; 在被视为属性值模板的属性中(例如,文字结果元素的属性),表达式由花括号分隔{}
.假设以下声明:
<xsl:variable name="test" select="'value'"/>
Run Code Online (Sandbox Code Playgroud)
......然后是以下内容:
<element attr="{$test}"><xsl:value-of select="$test"/></element>
Run Code Online (Sandbox Code Playgroud)
...结果是:
<element attr="value">value</element>
Run Code Online (Sandbox Code Playgroud)
关于AVT的一些分离说明和value-of
:
$test
.AVT中的大括号不是变量引用的一部分; 它们是表达分隔符.xsl:value
的select
属性已经接受一个表达式作为内容.问题:为什么不能value-of
在属性中使用这样的?
<element attr="<xsl:value-of select="$test"/>"/>
Run Code Online (Sandbox Code Playgroud)
答案:因为XSLT文档必须包含格式良好的XML(而不是).
问题:为什么不能{$varname}
在元素内容中使用?
Glib回答:因为XSLT的创建者没有这样设计.
Lau*_*ent 12
在样式表中,您必须使用:
<xsl:value-of select="$config"/>
Run Code Online (Sandbox Code Playgroud)
代替:
{$config}
Run Code Online (Sandbox Code Playgroud)