捕获第一个出现值

时间:2014-10-08 10:37:16

标签: xslt xslt-2.0

我在下面XML

<chapter num="1">
<section level="sect2">
<page>22</page>
</section>
<section level="sect3">
<page>23</page>
</section>
</chapter>

这里我试图第一次出现<page>

我使用下面的XSLT。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ntw="Number2Word.uri" exclude-result-prefixes="ntw">
    <xsl:output method="html"/>
    <xsl:strip-space elements="*"/>

    <xsl:variable name="ThisDocument" select="document('')"/>

    <xsl:template match="/">
        <xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE html>]]></xsl:text>

        <html>

            <body>
            <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="chapter">
        <section class="tr_chapter">
       <xsl:value-of select="//page[1]/text()"/>
            <div class="chapter">

            </div>
        </section>
    </xsl:template>
</xsl:stylesheet>

但打印出的所有page个valyes的输出。我只想要第一个。

当前输出。

<!DOCTYPE html>
  <html>
    <body>
      <section class="tr_chapter">2223
        <div class="chapter">
        </div>
      </section>
    </body>
  </html>

page之后打印<section class="tr_chapter">值,我只想 22 ,但我 2223 在这里我使用//page[1]/text(),因为我不确定page是否属于section,它是随机的。

请告诉我如何才能获得第一个page值。

这是转化http://xsltransform.net/3NzcBsR

2 个答案:

答案 0 :(得分:1)

尝试:

<xsl:value-of select="(//page)[1]"/>

http://xsltransform.net/3NzcBsR/1

请注意,这会获取整个文档中第一个页面元素的值。

答案 1 :(得分:1)

如果您想在模板中搜索第一个chapter后代的page上下文元素的内容,请使用<xsl:value-of select="descendant::page[1]"/><xsl:value-of select="(.//page)[1]"/>