_kaepten: Einfache Frage zu X-Path adressierung

Hallo Self-Freunde

In Anlehnung an die Self-Doku habe ich versucht mit X-Path auf ein Attribut zu adressieren. Leider habe ich aber dabei keinen Erfolg und versteht jetzt grad nicht warum.

Kann mir vielleicht jemand einen Tipp geben, was an meinem einfachen Beispiel nicht geht? Eingentlich erwartete ich, dass das irgendwas in rot ausgegeben wird. Allerdings ist alles grün, was bedeutet, dass nichts gematcht hat...

Vielen Dank für Hinweise und Tipps
Patrik

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<person>
 <augen farbe="blau">BLABLA</augen>
</person>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
 <xsl:template match="/">
  <html>
   <head/>
   <body>
    <p align="center" style="font-family:Tahoma; font-size:11px; color:green">
     xsl:apply-templates/
    </p>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="person/augen/@farbe">
  <p style="font-family:Verdana; font-size:12pt; color:red">
   <xsl:value-of select="."/>
  </p>
 </xsl:template>
</xsl:stylesheet>

  1. Ich habe etwas gefunden, was mich aber nicht wirklich schlauer macht!

    <xsl:template match="person/augen/@farbe">

    Wenn ich das so schreibe, dann gehts:
    <xsl:template match="person/augen[@farbe]">

    Ich bin nur durch Zufall, weil ich mich mit den Bedingungen befasst habe - und die funktionierten - darauf gekommen.

    Wie ist nun die Syntax richtig?

    person/augen/@farbe
    oder
    person/augen[@farbe]

    Patrik

    1. Hi,

      Wie ist nun die Syntax richtig?

      Beides ist richtig, aber die Bedeutung ist unterschiedlich.

      person/augen/@farbe

      Das matcht ein Attribut namens farbe in einem Element namens augen in einem Element namens person.

      person/augen[@farbe]

      Das matcht ein Element namens augen, das ein Attribut namens farbe hat, wobei sich das Element wiederum in einem Element namens person befindet.

      Du hast in Deinem XSL nur ein Template für person/augen/@farbe gehabt.
      Mit dem allgemeinen apply-templates werden also die default-Templates für person bzw. augen aufgerufen, die jeweils nur den content ausgeben.
      Dein person/augen/@farbe wurde also nie aufgerufen.

      Als Du das zu person/augen[@farbe] geändert hast, wurde für das augen-Element mit farbe-Attribut nicht mehr das default-Template benutzt, sondern das von Dir vorgegebene.

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo

        Nach dreimaligem durchlesen habe ich es nun verstanden. Natürlich ist das ein Unterschied - ich danke Dir für die Hilfe!

        Grüsse
        Patrik

        PS: Ich habe aus dem erstn P-Tag ein DIV gemacht :-))

  2. Hi,

    <p align="center" style="font-family:Tahoma; font-size:11px; color:green">
         xsl:apply-templates/
        </p>

    <xsl:template match="person/augen/@farbe">
      <p style="font-family:Verdana; font-size:12pt; color:red">
       <xsl:value-of select="."/>
      </p>
    </xsl:template>

    Das erzeugt ineinandergeschachtelte p-Elemente - das ist in HTML nicht zulässig.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi

      Das erzeugt ineinandergeschachtelte p-Elemente - das ist in HTML nicht zulässig.

      Danke für den Hinweis. Allerdings habe ich momentan andere Probleme ;-)

      Patrik