给定以下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"
来明确这一点。