Ich habe dieses einfache XML-DokumentXPath innerhalb Xslt ergibt anderes Ergebnis aus dem direkten Auswertung von XPath
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.org/attributes">
<record>
<codice_fiscale>IT07654930130</codice_fiscale>
<indirizzo tipo="casa">Viale Carlo Espinasse 5, Como</indirizzo>
</record>
<n:record xmlns:n="http://test.com/records">
<n:codice_fiscale>IT87654770157</n:codice_fiscale>
<n:indirizzo tipo="ufficio">Via Biancospini 20, Messina</n:indirizzo>
</n:record>
<record>
<codice_fiscale>IT471142131</codice_fiscale>
<indirizzo tipo="ufficio">Via Chiasserini 88B, Firenze</indirizzo>
<test>
<nummeroo>01-000-000</nummeroo>
<nummeroo>02-000-000</nummeroo>
</test>
<test>
<nummeroo>03-000-000</nummeroo>
<nummeroo>04-000-000</nummeroo>
</test>
<stuff>other stuff</stuff>
</record>
<things>
<nummero>08-000-000</nummero>
<nummero>09-000-000</nummero>
</things>
</root>
Der folgende XSLT 2.0 Sheet ausgeben soll die Namen aller Elemente, die mindestens eine Blattknoten als habe Kind.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="no" />
<xsl:strip-space elements="*"/>
<xsl:template match="//*[child::*[not(*)]]">
<xsl:value-of select="concat(name(), '
')" />
</xsl:template>
</xsl:stylesheet>
Ich benutze die omit-xml-declaration
und ich alle Leerzeichen Streifen ein einfaches Textdokument zu erhalten. Verkettung mit '
'
gibt mir eine Zeilenumbruch.
der oben genannten XML-Dokument angewandt, um die XSLT
record
n:record
record
things
Verwenden der XPath 2.0 Expression der Vorlage innerhalb des Sheet das folgende Ergebnis liefert, dh
//*[child::*[not(*)]]
in Verbindung mit dem Namen () - Funktion zum Abrufen des Elementnamens als Zeichenfolge, dh
//*[child::*[not(*)]]/name()
I erhalten das folgende Ergebnis
record
n:record
record
test
test
things
Mit dem XSLT 2.0 Stylesheet (verschiedene Editoren/XPath 2.0 Gutachter verwenden) und direkt den XPath 2.0-Ausdruck mit einem Editor Ausbeute unterschiedliche Bewertung der Ergebnisse!
Ich würde erwarten, dass die Ergebnisse genau gleich sein werden. Das Stylesheet und die direkte Auswertung des xpath //*[child::*[not(*)]]/name()
sind im Wesentlichen gleich und sollten die gleiche Textausgabe liefern.
Der XPath-Ausdruck und das Stylesheet sind sehr einfach und trotzdem kann ich nicht herausfinden, warum die Auswertung der beiden zu unterschiedlichen Ergebnissen führt.
Hat jemand eine Idee, warum die beiden Bewertungen zu unterschiedlichen Ergebnissen führen?
Danke für die hilfreiche Erklärung Michael. Es scheint, dass ich noch viel über xslt lernen muss. – Newbee