使用 XML 片段的 xsl:variable 上的 XPath 失败
Failing XPath on xsl:variable with XML fragment
我一定是遗漏了一些非常基本的东西。我想从存储在 xsl:variable
中的 XML 片段中的已转换 XML 文档中查找密钥。这是一个最小的例子:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<code>A</code>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="mappings">
<mapping key="A">Amy</mapping>
</xsl:variable>
<xsl:template match="code">
<xsl:value-of select="$mappings/mapping[@key = text()]"/>
</xsl:template>
</xsl:stylesheet>
使用 XSL 样式表转换此 XML 文档会产生空结果。似乎比较 @key = text()
是错误的,因为当我使用 <xsl:value-of select="$mappings/mapping[@key = 'A']"/>
时,它检索到期望值(即 "Amy")。我错过了什么?
使用
<xsl:template match="code">
<xsl:value-of select="$mappings/mapping[@key = current()]"/>
</xsl:template>
使用中间变量,它可以正常工作:
<xsl:template match="code">
<xsl:variable name="keyval" select="./text()" />
<out>
<xsl:value-of select="$mappings/mapping[@key = $keyval]"/>
</out>
</xsl:template>
我一定是遗漏了一些非常基本的东西。我想从存储在 xsl:variable
中的 XML 片段中的已转换 XML 文档中查找密钥。这是一个最小的例子:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<code>A</code>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:variable name="mappings">
<mapping key="A">Amy</mapping>
</xsl:variable>
<xsl:template match="code">
<xsl:value-of select="$mappings/mapping[@key = text()]"/>
</xsl:template>
</xsl:stylesheet>
使用 XSL 样式表转换此 XML 文档会产生空结果。似乎比较 @key = text()
是错误的,因为当我使用 <xsl:value-of select="$mappings/mapping[@key = 'A']"/>
时,它检索到期望值(即 "Amy")。我错过了什么?
使用
<xsl:template match="code">
<xsl:value-of select="$mappings/mapping[@key = current()]"/>
</xsl:template>
使用中间变量,它可以正常工作:
<xsl:template match="code">
<xsl:variable name="keyval" select="./text()" />
<out>
<xsl:value-of select="$mappings/mapping[@key = $keyval]"/>
</out>
</xsl:template>