Hallo Andreas,
Das ganz wird nicht angezeigt. Soweit ich das Thema bisher überblicken kann, kann ich "//Einstellung" nicht verwenden - wegen diesem Namespace-Zeugs im "parent".
Denn, wenn ich die XML modifiziere und die Zeile<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://abc.com/abc/Data" Fach1ID="d0aea575-3dca-403a-b14c-33df3b515e07" Fach2ID="4bb6e2a0-0574-4324-a935-0b4ccd95831a" Fach3ID="2ebc264a-df30-4fa1-836a-e352cb2eb82b" Fach4ID="2df3806b-f173-4e43-929b-7945a7dc7aea">
abändere in
<Data>
dann wird alles genau so angezeigt, wie ich das haben will. Kann mir einer helfen, wie ich das anspechen muss?
Dein Problem ist folgendes:
<Data xmlns="http://abc.com/abc/Data">
legt fest, dass der Default-Namespace für alle Elemente "http://abc.com/abc/Data" ist (NICHT jedoch für alle Attribute, das ist das IMHO ziemlich verwirrende an der XML-Namespace-Spec). XSLT verwendet nun XPath, um auf Elemente zuzugreifen. Bei XPath musst Du dann aber explizit den Namespace angeben, damit er das ganze erkennt.
Du hast zwei Möglichkeiten:
- Du wählst explizit den Namespace aus, d.h. Du definierst ihn Dir per
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:data="http://abc.com/abc/Data">
Dann kannst Du das Präfix "data" in XPath-Ausdrücken verwenden z.B. so:
<xsl:for-each select="//data:Einstellung">
Genauso musst Du natürlich auch alle anderen Elemente ansprechen:
<td><xsl:value-of select="data:Datum"/></td>
<td><xsl:value-of select="data:Zahl"/></td>
Wenn Du kein Präfix definieren willst, kannst Du (umständlicher) auch über Qualifikatoren arbeiten, d.h.
<xsl:for-each select="//*[local-name() = 'Einstellung']">
sowie
<td><xsl:value-of select="*[local-name() = 'Datum']"/></td>
<td><xsl:value-of select="*[local-name() = 'Zahl']"/></td>
(In dem Fall wäre sogar der Namespace komplett egal, ich würde diese Lösung dennoch nicht empfehlen)
Zudem kannst Du je nach XSLT-Prozessor meist noch die Syntax select="//{http://abc.com/abc/Data}Einstellung" nutzen, wenn Du den Namespacenamen direkt angeben willst.
Beachte bitte, dass das nur für Elementnamen gibt, bei Attributnamen (z.B. @data:Fach1-ID) wird das nicht funktionieren, da musst Du weiterhin nur den Namen schreiben (@Fach1-ID) - AUSSER vor dem Attribut steht explizit schon in der XML-Datei ein Namespace-Präfix, dann musst Du mit dem gleichen Namespace matchen (was in Deiner XML-Datei nicht zwangsläufig das gleiche Präfix sein muss!).
Viele Grüße,
Christian