Wie kann ich dynamisch festlegen der Standard-namespace-Deklaration für eine XSLT-transformation der XML-Ausgabe?

Kann ich es tun, aber nicht für den default namespace, mit der <xsl:namespace>. Wenn ich versuche es zu tun für den default namespace:

<xsl:namespace name="" select"myUri"/>

nie funktioniert. Es verlangt, dass ich explizit definieren den namespace für das element in der Lage sein, um die oben genannten null-Präfix-Deklaration.

Der Grund, warum ich wollen, das ist, weil ich habe eine Aufgabe zum transformieren eines XML-input-Datei in eine andere xml-Ausgabe. Die XML-Ausgabe hat viele Elemente und ich wollen nicht zu haben, der explizit den Namensraum für jedes element. Das ist, warum ich möchte, um den Standard und nie die Mühe wieder. Aber der Standard muss berechnet werden einige Daten in der XML-Quelle. Es ändert sich nicht während der ganzen transformation, aber es ist abhängig von XML-input-Daten.
Jede Lösung?

EDIT 1:
Zu sup-bis:

  1. Ich möchte einen namespace erstellen, dynamisch und legen Sie es auf der Standard-namespace des xml-Dokuments. Die uri des namespace abgeleitet ist von einigen Daten in der XML-Eingabedatei.
  2. Wenn ich <xsl:namespace> in mein root-Ausgabe-element, ich kann nicht erstellt ein Standard-namespace für die es nur ein Präfix ein. Und auch mit dem Präfix, ist es nicht weitergegeben an die Kinder.

EDIT 2:
dkackman vorgeschlagen:

<xsl:template match="root">
  <xsl:param name ="ns">my-computed-namespace</xsl:param>
  <xsl:element name="newRoot" namespace="{$ns}"/>
</xsl:template>

Es fast löst das problem. Leider sind die Kinder eingespritzt wird, mit ""(leer) - namespace durch den Transformator. Hier ist, was ich bekomme, wenn ich ein child-element:

<newRoot xmlns="my-computed-namespace"> 
    <child xmlns=""> ... 
    </child> 
 </newRoot>

Warum funktioniert der Transformator setzen diese xmlns="" in die Kinder? Wenn ich verhindern kann, das dann, das ich gefunden habe, meine Lösung.

  • Sie können in der Lage sein, zur Vereinfachung der Aufruf und die übergabe der berechneten namespace an, indem Sie eine variable auf Dokument-Rahmen anstelle des param - ich habe meine Antwort aktualisiert
  • Ja, ich weiß, diese Lösung, das ist, was ich ll wahrscheinlich tun. Ich habe dir einen Kommentar auf dieser
  • Ich habe nun bestätigt, dass <xsl:namespace> ist nicht hilfreich für die Lösung Ihres Problems. Siehe das update meiner Antwort.
InformationsquelleAutor Paralife | 2010-03-12
Schreibe einen Kommentar