Ich mag xml wie diese erstellen:XSLT fehlende Namespaces in inneren Tags, die gleiche Namensraum-Deklaration als Root-Element haben
<rns:RootElement xmlns:rns="urn:root-element" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:ins="urn:inner-doc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value>Some text</ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>
Mit dieser Vorlage:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<rns:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rns="urn:root-element"
xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ins="urn:inner-doc"
xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value><xsl:value-of select="//*[local-name()='SomeNode']"/></ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>
</xsl:template>
Aber statt Ergebnis, dass ich wollte, dass diese Vorlage gab mir ein bisschen anderes Ergebnis:
Wie Sie sehen können, fehlt dem InnerDoc-Element im Transformationsergebnis die Definition des Namensraums xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance", gibt es eine Möglichkeit, das Fehlen dieses Namensraums zu verhindern?
Um die Antwort von Martin Honnen ein wenig zu erweitern, möchte ich darauf hinweisen, dass das Fehlen der doppelten 'ins' Namespace-Deklaration ** nichts bewirkt **. Jeder konforme XML-Prozessor erkennt, dass die Namespace-Deklaration "ins" für das Wurzelelement auch für dieses Element "ins: InnerDoc" gilt. Jeder konforme XSL-Prozessor, der die Position dieses "ins: InnerDoc" -Elements an eine andere Position verschiebt, an der die Deklaration für das Stammelement nicht gilt, fügt bei Bedarf auch die Namespace-Deklaration hinzu. –
Ich weiß das, aber diese Anforderung geht von einem anderen System, und ich weiß nicht wirklich, ob sie meine Nachricht richtig ohne diesen Namespace erhalten würden. Wie auch immer, danke für diesen Kommentar! –