Ignorieren XML-namespace-Präfix, während die Auswahl-Elemente - XSLT
XML Version 1
<inboundData xmlns="urn:college:names:ws:docexchange">
<Root>
<College Version="5.0" xmlns:cidx="urn:abc:names:specification:col:schema:all:5:0" xmlns="urn:abc:names:specification:col:schema:all:5:0">
<Header>
<Address>
<AddressLine1>4600 Big Tree Way</AddressLine1>
</Address>
</Header>
</College>
</Root>
</inboundData>
XML-Version 2
<inboundData xmlns="urn:college:names:ws:docexchange">
<Root>
<ns1:College Version="5.0" xmlns:ns1="urn:abc:names:specification:col:schema:all:5:0">
<ns1:Header>
<ns1:Address>
<ns1:AddressLine1>4600 Big Tree Way</ns1:AddressLine1>
</ns1:Address>
</ns1:Header>
</ns1:College>
</Root>
</inboundData>
XSL-Code
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="urn:abc:names:specification:col:schema:all:5:0" xmlns:b="urn:college:names:ws:docexchange">
<xsl:template match="/">
<xsl:copy-of select="b:inboundData/b:College/*"/>
</xsl:template>
</xsl:stylesheet>
Korrektur in der XSL-code. (Realisiert die Fehler nach der Lektüre von Hansens Antwort)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="urn:abc:names:specification:col:schema:all:5:0" xmlns:b="urn:college:names:ws:docexchange">
<xsl:template match="/">
<xsl:copy-of select="b:inboundData/b:Root/*"/>
</xsl:template>
</xsl:stylesheet>
Den XSL-code funktioniert auch für XML-version 1. Aufgrund der zusätzlichen namespace "ns1", es funktioniert nicht für Typ-2. Wie kann ich das xsl-code funktioniert für beide Versionen? Freundlich mich aufzuklären!
- Das mag nicht von Bedeutung sein für die Beantwortung der Frage, aber auf den gegebenen Daten, Ihre Vorlage würde nichts tun, weil die
inboundData
element nicht ein Kind habenCollege
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Spiel-Elemente, die von Ihrer lokalen Namen, wie
a:College
ist kein Kind vonb:inboundData
ist es ein Nachkomme. Damit es passen sollteb:inboundData/*/a:College/*
Die
College
element gebunden ist, die den gleichen namespace für beide Dokumente.Ob oder nicht Sie XML-Dokumente mit Namensraum-Präfix oder wenn Sie verschiedene Präfix-Werte ist irrelevant. Sie werden "gesehen", die vom XML-Prozessor als die gleiche Art von element und richten sich an die gleiche Art von XPath, denn Sie sind gebunden an den gleichen Namensraum.
Den namespace-prefix verwendet, die in einer XPath-Anweisung nicht übereinstimmen, das namespace-Präfix im XML-Dokument (als wäre es unmöglich, vorherzusagen, was namesapce-Präfixe jemand wählen könnte, zu verwenden). Jedoch der namespace, der gebunden ist, muss übereinstimmen.
Beiden XML-Dokumente sind gleichwertig. Ob oder nicht die Elemente haben eine namaspece-Präfix, die Elemente sind an den gleichen namespaces.
Wenn man sieht, wie Sie deklariert sind und was Sie anzeigen, um in das erste XML-Dokument:
deklariert ein element mit dem Namen
College
ohne ein namespace-Präfix, das ist gebunden an den Namensraumurn:abc:names:specification:col:schema:all:5:0
wegen der Deklaration des namespace ohne ein namespace-Präfixxmlns="urn:abc:names:specification:col:schema:all:5:0"
.Im zweiten Beispiel:
Deklariert ein element mit dem Namen
College
Namensraum-Präfix gebunden ist, um den namespaceurn:abc:names:specification:col:schema:all:5:0
.Den untergeordneten Elementen dieser
College
Elemente in beiden Beispielen sind an den gleichen Namensraum wie dieCollege
element, das definiert, was der namespace für diens1
namespace-Präfix im ersten Beispiel, oder der null-namespace-Präfix in der zweiten Beispiel-Dokument.XSLT-und XPath-Adressierung diejenigen Elemente sollten dieselben Ergebnisse zurückgegeben.
Ihrem template match in der XSLT-sollte nicht für die Arbeit entweder Dokumente, wie
College
ist kein Kind voninboundData
.Würden Sie entweder anpassen müssen, um es zu:
oder