Einfache Frage zu X-Path adressierung
_kaepten
- xsl
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 version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<person>
<augen farbe="blau">BLABLA</augen>
</person>
<?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>
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
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
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 :-))
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
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