使用 XSLT 确定节点的位置



给定以下XML:

<data>
    <content>
        <section link-id="32">
            <entry id="9">
                <title handle="apples">Apples</title>
            </entry>
            <entry id="1">
                <title handle="oranges">Oranges</title>
            </entry>            
            <entry id="4">
                <title handle="pears">Pears</title>
            </entry>
        </section>
        <section link-id="23">
            <entry id="59">
                <title handle="chevrolet">Chevrolet</title>
            </entry>
            <entry id="31">
                <title handle="toyota">Toyota</title>
            </entry>            
            <entry id="54">
                <title handle="bmw">BMW</title>
            </entry>
        </section>
    </content>
</data>

由此 XSL 设置样式:

<xsl:template match="data">
<html>
<body>
<xsl:apply-templates select="content/section" />      
</body>
</html>
</xsl:template>
<xsl:template match="content/section">
    <ul>
        <li>
            Title: <xsl:value-of select="entry/title"/>
        </li>   
        <li>
            Position: <xsl:value-of select="position()"/>
        </li>               
    </ul>
</xsl:template>

我将如何显示和整数表示所选entry节点的顺序 (1-6)?预期值为 1 和 4。该示例显示值 1 和 2,即所选节点集中的位置。我想要的是XML文件中的数字位置,而不是选择。

我不清楚你在问什么,因为你的"1 和 4"和对"在上一个节点集中的位置"的引用有点令人困惑。 但我认为你有几个选择。

您可以从头开始处理所有条目:

<body>
  <ul>
    <xsl:apply-templates select="content/section/entry"/>
  </ul>
</body>
...
<xsl:template match="entry">
  <li>
    Title: <xsl:apply-templates select="title"/>
  </li>
  <li>
    Position: <xsl:apply-templates select="position()"/>
  </li>
</xsl:template>

或者,如果您发现必须分别处理部分和条目,那么您会发现自己处于一个position()没有帮助的条目中。 此时,您可以使用 <xsl:number level="any"/> . 如果您位于条目深处的位置,则可以使用 <xsl:number count="entry" level="any"/> .

你混淆了"position"(一个描述你想要什么的英语单词)和"position()"(一个给你带来完全不同的东西的XPath函数)。

尝试

<xsl:for-each select="entry[1]">
  <xsl:number level="any" from="content"/>
</xsl:for-each>

看起来好像您有意使用 XSLT 1.0"功能",即应用于节点集xsl:value-of忽略除第一个节点之外的所有节点。如果您希望您的代码与 2.0 兼容(并且读者可以理解),最好通过编写 select="entry[1]/title" 来明确这一点。

相关内容

  • 没有找到相关文章

最新更新