Curt: Attribute im root nicht erlaubt?

Hallo,

ich experientiere gerade etwas mit XSL und XPath und bin begeister :)

ok, zu meiner frage/problem. Ich soll gerade ein paar kleine tutorials schreiben (Installationsanleitungen, konfigurationsbeispiele etc) und da dachte ich wäre ne gute Gelegenheit mal XSL kennenzulernen.

Hab testweise folgende XML-Datei

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="layout.xsl" ?>

<dokument id="apache_konfigurieren" parent="apache" title="Apache konfigurieren">
<kapitel>
<thema>Virtuelle Server</thema>
<einleitung>Apache ist in der Lage ....</einleitung>
<beispiel>...</beispiel>
<beschreibung>...</beschreibung>
</kapitel>
</dokument>

Das Stylesheet (layout.xsl) sieht wie folgt aus (auszug!)

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head><title><xsl:value-of select="@title"/>
</title></head>
<body>
xsl:apply-templates/
</body></html>
</xsl:template>

</xsl:stylesheet>

Es klappt alles soweit ganz gut bis auf eine Sache. Ich habe die wichtigen allgemeinen Information im root verankert z.B. title und versuche momentan vergeblich diese Attribut anzusprechen.

in SELFTHTML unter http://selfhtml.teamone.de/xml/darstellung/xpathsyntax.htm#knotentypen_achsen_pfade war zu lesen das die dokument-wurzel selbst kein Elementknoten ist. Würde das heissen das dieses auch keine Attribute besitzen kann? und diese auch nicht adressierbar wären.
Würde mir erkären warum ich an das Attribut nicht rankomme ;)

Denoch scheint mir das irgendwie etwas unlogisch, ich müsste in meinem fall ja ein weiteres quasi-Wurzelelement einfügen (welches ich nicht bräuchte) um dort allgemeine Informationen abzulegen und auch au diese zuzugreifen.

Möchte eigentlich erstmal nur gewissheit haben ob ich nur falsch Adressiere oder ob es nicht geht.

gruss

Curt

  1. hi

    genau kenn ich mich damit nicht aus, aber wenn es so wäre, wäre ja das hier auch nicht legal:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    ....oder?!

    Grüße aus Bleckede

    Kai

    1. genau kenn ich mich damit nicht aus, aber wenn es so wäre, wäre ja das hier auch nicht legal:

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      ....oder?!

      jup :)

      seh ich auch so, aber gerade fällt mir auf das die Überschrift meines Postings net so 100% passt :)

      die eigentliche frage ist ja ob ich diese dann auch per XPath ansprechen kann und wie

      trotzdem thx

      Curt

  2. Tach,

    ok, zu meiner frage/problem. Ich soll gerade ein paar kleine tutorials schreiben (Installationsanleitungen, konfigurationsbeispiele etc) und da dachte ich wäre ne gute Gelegenheit mal XSL kennenzulernen.

    Hab testweise folgende XML-Datei

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="layout.xsl" ?>

    <dokument id="apache_konfigurieren" parent="apache" title="Apache konfigurieren">
    </dokument>

    Das Stylesheet (layout.xsl) sieht wie folgt aus (auszug!)

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <head><title><xsl:value-of select="@title"/>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    Es klappt alles soweit ganz gut bis auf eine Sache. Ich habe die wichtigen allgemeinen Information im root verankert z.B. title und versuche momentan vergeblich diese Attribut anzusprechen.

    in SELFTHTML unter http://selfhtml.teamone.de/xml/darstellung/xpathsyntax.htm#knotentypen_achsen_pfade war zu lesen das die dokument-wurzel selbst kein Elementknoten ist. Würde das heissen das dieses auch keine Attribute besitzen kann? und diese auch nicht adressierbar wären.
    Würde mir erkären warum ich an das Attribut nicht rankomme ;)

    / und /dokument sind zwei unterschiedliche Dinge.
    / ist wie Du ja selbst rausgefunden hast, kein Elementknoten.
    Nur Elementknoten können Attribute haben.
    /dokument ist ein Elementknoten.

    Andreas

  3. hallo Curt,

    Es klappt alles soweit ganz gut bis auf eine Sache. Ich habe die wichtigen allgemeinen Information im root verankert z.B. title und versuche momentan vergeblich diese Attribut anzusprechen.

    wie schon Andereas gesagt hat, document root (wurzelknoten) und wurzelelement sind nicht ein und das selbe.

    mit  <xsl:template match="/">  adressierst du virtuellen document root.
    also müsstest du dann <title><xsl:value-of select="document/@title"/></title>  schreiben

    oder du machst es so:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/dokument">
    <html>
    <head><title><xsl:value-of select="@title"/>
    </title></head>
    <body>
    xsl:apply-templates/
    </body></html>
    </xsl:template>

    </xsl:stylesheet>

    Denoch scheint mir das irgendwie etwas unlogisch, ich müsste in meinem fall ja ein weiteres quasi-Wurzelelement einfügen (welches ich nicht bräuchte) um dort allgemeine Informationen abzulegen und auch au diese zuzugreifen.

    Xpath benötigt diesen virtuellen document root (wurzelknoten).

    grüße
    Thomas