xslt 2.0 中的映射在从参数传递键值时不起作用?
map in xslt 2.0 is not working while passing key-value from parameter?
我在从地图获取数据时遇到问题:key :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output indent="yes"/>
<xsl:variable name="apos">'</xsl:variable>
<xsl:template match="/">
<root>
<xsl:variable name="mnth" select="3"/>
<xsl:variable name="months" select="map{ '1': 'January', '2': 'February', '3': 'March'}"/>
<xsl:variable name="pos" select="concat($apos, string($mnth), $apos)"/>
<pos>
<xsl:value-of select="$pos"/>
</pos>
<correctval>
<xsl:value-of select="$months('3')"/>
</correctval>
<valuenotcoming>
<xsl:value-of select="$months($pos)"/>
</valuenotcoming>
</root>
</xsl:template>
</xsl:stylesheet>
在下面的代码中 $pos
返回 '3'
并且根据这个 $months($pos)
等于 $months('3')
,但是 $months($pos)
没有返回它对应的值:
<xsl:variable name="pos" select="concat($apos, string($mnth), $apos)"/>
<pos><xsl:value-of select="$pos"/></pos>
<correctval><xsl:value-of select="$months('3')"/></correctval>
<valuenotcoming><xsl:value-of select="$months($pos)"/></valuenotcoming>
要求输出:
<root>
<pos>'3'</pos>
<correctval>March</correctval>
<valuenotcoming>March</valuenotcoming>
</root>
当前输出:
<root>
<pos>'3'</pos>
<correctval>March</correctval>
<valuenotcoming/>
</root>
$pos
包含一个长度为3个字符的字符串;字面上 '3'
.
当您执行 $months('3')
时,撇号表示使用字符串文字(而不是数字)。字符串本身只是一个字符 3
.
您需要将 $pos
的声明更改为此,以便将其设置为仅包含 3
.
单个字符的字符串文字
<xsl:variable name="pos" select="string($mnth)"/>
另请注意,map
函数仅在 XSLT 3.0 中可用。如果您使用的是 XSLT 3.0 处理器,例如 Saxon 9.8 HE,即使您将 version="2.0"
放入电子表格,它仍会处理地图函数。
我在从地图获取数据时遇到问题:key :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output indent="yes"/>
<xsl:variable name="apos">'</xsl:variable>
<xsl:template match="/">
<root>
<xsl:variable name="mnth" select="3"/>
<xsl:variable name="months" select="map{ '1': 'January', '2': 'February', '3': 'March'}"/>
<xsl:variable name="pos" select="concat($apos, string($mnth), $apos)"/>
<pos>
<xsl:value-of select="$pos"/>
</pos>
<correctval>
<xsl:value-of select="$months('3')"/>
</correctval>
<valuenotcoming>
<xsl:value-of select="$months($pos)"/>
</valuenotcoming>
</root>
</xsl:template>
</xsl:stylesheet>
在下面的代码中 $pos
返回 '3'
并且根据这个 $months($pos)
等于 $months('3')
,但是 $months($pos)
没有返回它对应的值:
<xsl:variable name="pos" select="concat($apos, string($mnth), $apos)"/>
<pos><xsl:value-of select="$pos"/></pos>
<correctval><xsl:value-of select="$months('3')"/></correctval>
<valuenotcoming><xsl:value-of select="$months($pos)"/></valuenotcoming>
要求输出:
<root>
<pos>'3'</pos>
<correctval>March</correctval>
<valuenotcoming>March</valuenotcoming>
</root>
当前输出:
<root>
<pos>'3'</pos>
<correctval>March</correctval>
<valuenotcoming/>
</root>
$pos
包含一个长度为3个字符的字符串;字面上 '3'
.
当您执行 $months('3')
时,撇号表示使用字符串文字(而不是数字)。字符串本身只是一个字符 3
.
您需要将 $pos
的声明更改为此,以便将其设置为仅包含 3
.
<xsl:variable name="pos" select="string($mnth)"/>
另请注意,map
函数仅在 XSLT 3.0 中可用。如果您使用的是 XSLT 3.0 处理器,例如 Saxon 9.8 HE,即使您将 version="2.0"
放入电子表格,它仍会处理地图函数。