XSLT-Sortierung - zum Sortieren von xml-childnodes innerhalb einer übergeordneten Knoten mit einem Attribut

Was begann als eine einfache Sache wurde ziemlich unangenehm für XSLT-noob.

Versucht zu Sortieren childnodes - /absteigen, aber nach dem hinzufügen eines Attributs zu Ihren übergeordneten Knoten, ich erhalte eine Fehlermeldung beim Debuggen in VS2010:

"Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added."

Nehme an, dass ich mit diesem einfachen XML:

<posts>
    <year value="2013">
        <post postid="10030" postmonth="1">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10040" postmonth="2">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10050" postmonth="3">
             <othernode></othernode>
             <othernode2></othernode2>
        </post>
    </year>
    <year value="2012">
        <post postid="10010" postmonth="1">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10015" postmonth="2">
            <othernode></othernode>
            <othernode2></othernode2>
        </post>
        <post postid="10020" postmonth="3">
             <othernode></othernode>
             <othernode2></othernode2>
        </post>
    </year>
</posts>

Ich gebe einen XPATH-Ausdruck zu einer xmldatasource zum abrufen der relevanten <year> Knoten, z.B. 2013.
Dann muss ich Sortieren, Ihr Kind <post> Knoten absteigend mit postid, also für <year value=2013>, postid=10050 würde zeigen, bis erste gerendert.

So, um klar zu sein: ich bin nur daran interessiert, die Sortierung innerhalb einer <year> Knoten.

Bevor ich aufteilen der Knoten in einem separaten Knoten (d.h. xml /posts/post) durch das folgende XSLT gearbeitet:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()">
                <xsl:sort select="@postid" data-type="text" order="descending"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Nun die xmldatasource ist leer, wenn es läuft wegen dem oben genannten Fehler. Wenn ich den pass aufsteigend in der Reihenfolge der gleichen xml zurückgegeben offensichtlich (keine transformation)

Frage: wie zum aktualisieren der XSLT-oben (oder neuer), um Platz für den übergeordneten Knoten-Attribut (<year value="">)? Durch Forschung einer Antwort sagte: "ich muss Hinzugefügt Attribut Schöpfung vor der Erstellung des Elements". Dies ist sinnvoll, da gerade die debugger, die childnodes gebildet, desc Ordnung, aber das Jahr-tag fehlt seinem Attribut. Aber ich habe nicht wirklich eine Ahnung über XSLT. Kann nicht sehen, dass es zu kompliziert, aber einfach nicht wissen, die Sprache.

Jede Hilfe, sehr dankbar. Dank

InformationsquelleAutor JimXC | 2013-02-01
Schreibe einen Kommentar