我想在xsl中有一个键值映射,所以定义了一个具有xml片段的变量,但是后来当我尝试访问变量中的xml节点时,我得到一个错误,类型的xpath xpression无法解析。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:variable name="map"> <map> <entry key="key-1">value1</entry> <entry key="key-2">value2</entry> <entry key="key-3">value3</entry> </map> </xsl:variable> <output> <xsl:value-of select="$map/entry[@key='key-1']"/> </output> </xsl:template> </xsl:stylesheet>
XSLT 2.0
原文链接:https://www.f2er.com/xml/293271.html使用XSLT 2.0,以下解决方案的工作原理是:
<xsl:variable name="map"> <entry key="key-1">value1</entry> <entry key="key-2">value2</entry> <entry key="key-3">value3</entry> </xsl:variable> <xsl:template match="/"> <output> <xsl:value-of select="$map/entry[@key='key-1']"/> </output> </xsl:template>
XSLT 1.0
您不能在XSLT 1.0中的XPath表达式中使用结果树片段,但是fn:document()可以检索映射值。一个similar question的答案将在这里工作:
<xsl:value-of select="document('')//xsl:variable[@name='map']/map/entry[@key='key-1']"/>
document("")
refers to the root node of
the stylesheet; the tree
representation of the stylesheet is
exactly the same as if the XML
document containing the stylesheet was
the initial source document.
但是,您不需要为此使用xsl:variable。您可以直接在xsl:stylesheet下指定地图节点,但您必须记住,顶级元素必须具有非空名称空间URI:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="some.uri" exclude-result-prefixes="my"> <my:map> <entry key="key-1">value1</entry> <entry key="key-2">value2</entry> <entry key="key-3">value3</entry> </my:map> <xsl:template match="/"> <output> <xsl:value-of select="document('')/*/my:map/entry[@key='key-1']"/> </output> </xsl:template> </xsl:stylesheet>