xml – XSLT:在XSLT中创建一个地图

前端之家收集整理的这篇文章主要介绍了xml – XSLT:在XSLT中创建一个地图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在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

使用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']"/>

XSLT 1.0 specification年所述:

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>
原文链接:https://www.f2er.com/xml/293271.html

猜你在找的XML相关文章