XSLT: Eine Sequenz von mehr als einem Element ist nicht erlaubt, da das erste argument an concat()

Ich versuche zu generieren, die eine pagelist, die aus einer Verkettung der id der verschiedenen divs (@Kapitel)|(@). Mein problem ergibt sich aus geschachtelten Strukturen: @Teil kann eine beliebige Anzahl von @Kapitel. Ich will nur wählen Sie die id des letzten Vorfahren auf eine Seitenzahl im Dokument um.

Unten ist ein Ausschnitt aus der XML:

<text>
    <div class="part" id="s9781483352947.i870">
        <a class="page" id="pbr-31"/>
        <h1 class="title">Part 1</h1>
        <p>This is a paragraph.</p>
        <p>This is a paragraph.</p>
        <div class="chapter" id="s9781483352947.n3.i884">
            <a class="page" id="pbr-34"/>
            <h1 class="title">Chapter 1</h1>
            <p>This is a paragraph</p>
        </div>
    </div>
</text>

Und unten ist mein XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="/">
    <xsl:element name="nav">
        <xsl:element name="h1">
            <xsl:value-of select="'Pages'"/>
        </xsl:element>
        <xsl:element name="ol">
            <xsl:apply-templates mode="pagelist" select="//a[@class='page']"/>
        </xsl:element>
    </xsl:element>
    </xsl:template>

    <xsl:template match="a[@class='page']" mode="pagelist">
        <xsl:variable name="html" select="concat(ancestor::div[@class='chapter'][1]/@id | ancestor::div[@class='part'][1]/@id,'.xhtml#page')"/>
        <xsl:variable name="pagenumber" select="substring-after(@id,'-')"/>
        <xsl:element name="li">
            <xsl:element name="a">
                    <xsl:attribute name="href" select="concat($html,$pagenumber)"/>
                    <xsl:value-of select="substring-after(@id,'-')"/>
                </xsl:element>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

Jedoch, bekomme ich immer die Fehlermeldung: Eine Sequenz von mehr als einem Element ist nicht erlaubt, da das erste argument an concat(). Natürlich sind meine XPath-Auswahl mehrerer Zeichenfolgen im ersten argument aufgrund der @ - Teil und @Kapiteln. Wie kann ich die Auswahl eingrenzen und der erste Vorfahr des a class='Seite'?

Dies ist die gewünschte Ausgabe für das obige Beispiel:

<nav>
    <h1>Pages</h1>
    <ol>
        <li>
            <a href="s9781483352947.i870.xhtml#page31">31</a>
        </li>
        <li>
            <a href="s9781483352947.n3.i884.xhtml#page34">34</a>
        </li>
    </ol>
</nav>

InformationsquelleAutor user2093335 | 2013-12-04

Schreibe einen Kommentar