XML-Experten hier?

Claus_ak18

Mitglied
Thread Starter
Dabei seit
18.01.2007
Beiträge
502
Reaktionspunkte
10
Speziell hätte ich eine Frage zu dem <xsl:sort...

Kennt sich da jemand aus?
 

timbugto

Mitglied
Dabei seit
08.11.2006
Beiträge
114
Reaktionspunkte
2
Du möchtest sicherlich per XSLT, XML-Elemente sortieren und ausgeben lassen. Was ist deine genaue Frage-vielleicht kann ich helfen.

Gruß
 

Claus_ak18

Mitglied
Thread Starter
Dabei seit
18.01.2007
Beiträge
502
Reaktionspunkte
10
Genau das möchte ich. Das Hier ist meine XML-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="02.xsl"?>
<!DOCTYPE kontakt SYSTEM "file:/Users/Claus/Documents/Uni/z_xml_test/01.dtd">

<kontakt>
    <name>
        Claus
    </name>
    <name>
        Tobi
    </name>
    <name>
        Jenny
    </name>
    <name>
        Niko
    </name>
    <name>
        Dejan
    </name>
</kontakt>

Und das hier die xsl-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:output method="html"/>
    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>
                    Sortierung
                </TITLE>
            </HEAD>
            <BODY>
                <xsl:for-each select="//kontakt/name">
                    <xsl:sort select="/kontakt" data-type="text" order="ascending"/>
                    
                    
                    <BR/>
                </xsl:for-each>
                
            </BODY>    
        </HTML>
        
    </xsl:template>
</xsl:stylesheet>

Und die Namen sollen Alphabetisch sortiert werden.

Ich denke mal das ich die Pfad-Angabe falsch habe. Aber ich komm einfach nicht dahinter :noplan:
 

timbugto

Mitglied
Dabei seit
08.11.2006
Beiträge
114
Reaktionspunkte
2
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE> Sortierung </TITLE>
            </HEAD>
            <BODY>
                    <xsl:for-each select="//name">
                        <xsl:sort select="." data-type="text" order="ascending"/>
                        <li>
                            <xsl:value-of select="."/>
                        </li>
                        <BR/>
                    </xsl:for-each>
            </BODY>
        </HTML>
    </xsl:template>

dein Pfad war falsch, aber damit klappt es.
 

Claus_ak18

Mitglied
Thread Starter
Dabei seit
18.01.2007
Beiträge
502
Reaktionspunkte
10
Super! Vielen Dank.

Kannst Du mir vielleicht kurz erklären wieso das nun funktioniert?
 

timbugto

Mitglied
Dabei seit
08.11.2006
Beiträge
114
Reaktionspunkte
2
Code:
                    <xsl:for-each select="/kontakt/name">
                        <xsl:sort select="self::node()" data-type="text"/>
                        <li>
                            <xsl:value-of select="self::node()"/>
                        </li>
                        <BR/>
                    </xsl:for-each>

So geht's auch, wenn das weiter hilft.

Mit der "for-each" Schleife suchst du ja den gewünschten Knoten. Da du ihn presentiert bekommst, brauchst du nur nach dem aktuellen Element ("Name") sortieren und ausgeben. Mit "self::node()" oder "." adressiert man das aktuelle Element.

Hoffe es hilft, ist aber alles nit so kompliziert.

Gruß
 

Claus_ak18

Mitglied
Thread Starter
Dabei seit
18.01.2007
Beiträge
502
Reaktionspunkte
10
OK, und //name heißt. Suche Kind das name heißt?

Noch eine Frage außerhalb dieser:
position() gibt was an?

@timbugto: Du bist mir eine große Hilfe. :) Danke!
 
Oben