【问题标题】:Array with XSLT 1.0使用 XSLT 1.0 的数组
【发布时间】:2020-11-05 12:55:47
【问题描述】:

下面有一个简单的数组

<xsl:template match="/">
    <xsl:variable name="array">
        <Item>One</Item>
        <Item>Two</Item>
        <Item>Three</Item>
    </xsl:variable>
    <html>
        <body>
            <xsl:value-of select="$array"/>
        </body>
    </html>
</xsl:template> 

哪些显示

OneTwoThree

但是,当我尝试时

<xsl:value-of select="$array[0]"/>

整个分页符

知道如何访问数组中的“One”吗?

【问题讨论】:

    标签: arrays xml xslt xslt-1.0


    【解决方案1】:

    首先,XSLT 1.0 中没有数组。您的变量是带有 3 个 Item 子元素的 result tree fragment

    结果树片段不能直接解析;您需要先使用处理器支持的扩展功能将它们转换为节点集 - 例如:

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:exsl="http://exslt.org/common"
    extension-element-prefixes="exsl">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/">
        <xsl:variable name="array">
            <Item>One</Item>
            <Item>Two</Item>
            <Item>Three</Item>
        </xsl:variable>
        <html>
            <body>
                <xsl:value-of select="exsl:node-set($array)/Item[1]"/>
            </body>
        </html>
    </xsl:template> 
    
    </xsl:stylesheet>
    

    或者,您可以通过直接解析样式表来绕过限制:

    <xsl:template match="/">
        <xsl:variable name="array">
            <Item>One</Item>
            <Item>Two</Item>
            <Item>Three</Item>
        </xsl:variable>
        <html>
            <body>
                <xsl:value-of select="document('')//xsl:variable[@name='array']/Item[1]"/>
            </body>
        </html>
    </xsl:template> 
    

    请注意,节点编号从 1 开始,而不是 0。

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2014-12-09
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多