Entschuldigung.Ich habe viele ähnliche Frage, aber leider die meisten von ihnen nicht für mich arbeiten.Meine Anforderung ist 1) Ich muss Namespace nur für das Stammelement mit XSLT hinzufügen 2) Ich benutze xsl: result-document, um mehrere XML-Dateien aus einer einzigen Eingabe zu generieren. Die Row-Elemente aller resultierenden Dokumente sollten einen Namespace haben.Hinzufügen von Namespace zu nur Root-Element mit xslt
Wenn ich die folgende Lösung versuche, bekomme ich XMLNS in alle meine Kind-Root-Tags. Wenn ich versuche, xsl: copy, bekomme ich Tag von Eingabe-XML, die ich nicht will, weil meine Ausgabe-Tags vollständig von meiner Eingabe abweichen.
I/p:
<einfo>
<employee>
<eid>456</eid>
<firstname>def</firstname>
<lastname>y</lastname>
</employee>
</einfo>
mein XSLT:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Global Variables -->
<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:template match="einfo">
<xsl:for-each select="employee">
<xsl:variable name="docName" select="eid"/>
<xsl:result-document href="{$docName}">
<xsl:element name="employee" namespace="myurl">
<xsl:call-template
name="processEmployees">
<xsl:with-param name="p_firstname"
select="firstname"/>
<xsl:with-param name="p_lastname"
select="lastname"/>
</xsl:call-template>
</xsl:element>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template name="processEmployees">
<xsl:param name="p_firstname"/>
<xsl:param name="p_lastname"/>
<xsl:element name="firstname">
<xsl:value-of select="$p_firstname"/>
</xsl:element>
<xsl:element name="lastname">
<xsl:value-of select="$p_lastname"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
tatsächliche Ausgang:
<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns="myurl">
<firstname xmlns="">def</firstname>
<lastname xmlns="">y</lastname>
</employee>
Erwartete Ausgabe: Ich brauche nur Root-Element, dh Mitarbeiter Namensraum zu haben (XMLNS).
Bitte senden Sie sich ein ** reproduzierbares ** Beispiel mit einem Eingang und ein ** komplett ** (vorzugsweise minimierte) Sheet - siehe: [MCVE]. - Im Allgemeinen missverstehen Sie, wie Namespaces funktionieren.Ein Standardnamespace wird geerbt. Wenn Sie nicht möchten, dass die 'address' die überschreibende No-Namespace-Deklaration hat, die sie jetzt hat, müssen Sie sie in den gleichen Namespace einfügen wie ihre Heimatadresse 'home'. Ebenso für alle anderen Elemente im Ergebnisbaum. –