0

我发现这个网站说我可以选择这段代码的特定节点

<xsl:variable name="in-xml" as="item()*"> <in-xml>
     <a>1</a>
     <c>2</c>
     <a>3</a>
     <a>4</a>
     <a>5</a>    </in-xml> </xsl:variable>

它说如果你写这个:

$in-xml/*[position() > 2]

你会得到这个:

<a>3</a>
<a>4</a>
<a>5</a>

但它似乎不适合我。这是网站:http ://www.xsltfunctions.com/xsl/fn_position.html

任何人都可以提供代码来获得它吗???

4

2 回答 2

2

在 XSLT 1.0 中,只能对输入数据执行 XPath 表达式,而不能对在评估样式表过程中创建的数据执行。因此,使您的示例工作的一种方法是将in-xml数据移动到外部文档并使用该document()函数加载它。还有一些棘手/聪明的技术涉及将in-xml元素编写为子元素xsl:stylesheetdocument('')/xsl:stylesheet/in-xml用于声明变量;这些技术适用于良好的 XSLT 1.0 实现,但在某些浏览器实现中失败。

在 XSLT 2.0 中,对使用 XPath 的限制被放宽了,您所绘制的线条应该可以工作。

于 2012-09-25T15:40:45.673 回答
2

EXSLT 定义了可以在这里使用的 node-set() 。这是一个 MsXsl 实现:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:variable name="in-xml" > <!--as="item()*-->
            <in-xml>
                <a>1</a>
                <c>2</c>
                <a>3</a>
                <a>4</a>
                <a>5</a>
            </in-xml>
        </xsl:variable>

        <xsl:value-of select="msxsl:node-set($in-xml)/in-xml/a[position() > 2][1]"/>
    </xsl:template>
</xsl:stylesheet>
于 2012-09-25T16:06:49.930 回答