使用xsl:number检索第n个元素

时间:2017-01-08 17:27:10

标签: xml xslt

在我的XML文档中,我有笔记调用和尾注,显然不在文档中的同一位置。我可以确定<ion-header> <ion-navbar color="primary"> <ion-title>{{entry.title}}</ion-title> </ion-navbar> </ion-header> <ion-content padding> <!--<div [innerHTML]="entry.description"></div>--> </ion-content> |--------------------------------------------------| import {NavController, NavParams} from 'ionic-angular'; import { Component } from '@angular/core'; @Component({ templateUrl: 'detail-page.html' }) export class DetailPage { constructor(public nav: NavController, navParams:NavParams) { console.log('run'); this.nav = nav; var entry = navParams.get('selectedEntry'); console.log('my entry is '+ entry.title); } } 元素和<notecalls>元素的数量完全相同。使用XSL,我想检索相应<endnote>的内容(即:第一个<endnote>元素与第一个<notecall>元素一起使用,依此类推)以创建新元素由一个数字和尾注的内容组成。

我使用了xsl:number函数,如下所示;但是检索到的音符的内容始终是第一个尾注元素,尽管输出文件中的重新编号是正确的。我在这里错过了什么?

以下是我的XML结构:

<endnote>

来自XSL文件的相关部分:

<main_text>Some text<notecall>1</notecall> some other text </main_text>
<main_text>More and more long text<notecall>2</notecall> and more even</main_text>
<main_text>And some more again <notecall>3</notecall> etc…<main_text>

<endnote>The content of the first endnote</endnote>
<endnote>The content of the second one</endnote>
<endnote>The content of the third one</endnote>

我想:

<xsl:template match="notecall">
    <xsl:variable name="posit">
        <xsl:number level="any"/>
    </xsl:variable>
    <seg>
        <xsl:value-of select="$posit"/>
        <note><xsl:value-of select="(//endnote)[$posit]"/></note>
    </seg>
</xsl:template>

但我得到的是:

<p>Some text<seg>1<note>The content of the first endnote</note></seg> some other text</main_text>
<p>More and more long text<seg>2<note>The content of the second one</note></seg> and more even</main_text>
<p>And some more again <seg>3<note>The content of the third one</note></seg>  etc…</main_text>

1 个答案:

答案 0 :(得分:2)

如果您使用XSLT 2.0或更高版本

<xsl:variable name="posit">
    <xsl:number level="any"/>
</xsl:variable>

<xsl:variable name="posit" as="xs:integer">
    <xsl:number level="any"/>
</xsl:variable>

否则将<xsl:value-of select="(//endnote)[$posit]"/>更改为<xsl:value-of select="(//endnote)[position() = $posit]"/>,因为您的变量是结果树片段而不是数字,因此要将其用作您需要明确比较的位置,或者转换为数字与<xsl:value-of select="(//endnote)[number($posit)]"/>