XML-Experten hier?

Claus_ak18

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

Kennt sich da jemand aus?
 

timbugto

Mitglied
Registriert
08.11.2006
Beiträge
114
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
Registriert
18.01.2007
Beiträge
502
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
Registriert
08.11.2006
Beiträge
114
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
Registriert
18.01.2007
Beiträge
502
Super! Vielen Dank.

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

timbugto

Mitglied
Registriert
08.11.2006
Beiträge
114
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
Registriert
18.01.2007
Beiträge
502
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