0

给定以下 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 文件中的数字位置,而不是选择。

4

2 回答 2

0

您将“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".

于 2013-09-30T08:00:05.830 回答
0

我不清楚您到底在问什么,因为您的“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"/>.

于 2013-09-30T02:04:19.510 回答