XSLT verfügt über eine spezielle integrierte Funktion, die das Generieren von Ausgaben unterstützt, nämlich XSLT.
Dies ist die <xsl:namespace-alias>
XSLT-Direktive.
Als the XSLT 1.0 Spec von explaiened.
"
<!-- Category: top-level-element -->
<xsl:namespace-alias
stylesheet-prefix = prefix | "#default"
result-prefix = prefix | "#default" />
A Sheet das xsl:namespace-alias
Element verwenden können, um festzustellen, dass ein NamespaceURI ist ein alias für einen anderen NamespaceURI Wenn ein Literal NamespaceURI. wurde als Alias für einen anderen Namespace-URI deklariert, dann ist der Namespace-URI im Ergebnisbaum der Namespace-URI, für den der Literal-Namespace-URI ein Alias ist, anstelle des Literal-Namespace-URI selbst. Das xsl:namespace-alias
-Element decl res, dass der Namespace-URI, der an das durch das stylesheet-prefix
-Attribut angegebene Präfix gebunden ist, ein Alias für den Namespace-URI ist, der an das durch das result-prefix
-Attribut angegebene Präfix gebunden ist. Daher gibt das Attribut stylesheet-prefix
den Namespace-URI an, der im Stylesheet angezeigt wird, und das Attribut gibt den entsprechenden Namespace-URI an, der im Ergebnisbaum angezeigt wird. "
Hier ist ein kleines Beispiel für eine Transformation, die eine xsl:stylesheet
enthält eine xsl:variable
, erzeugt, die in der gewünschten Art und Weise aufgebaut ist:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="my:dummyNS" exclude-result-prefixes="xxx"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/>
<xsl:template match="/*">
<xxx:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xxx:variable name="{@name}">
<xsl:value-of select="."/>
</xxx:variable>
</xxx:stylesheet>
</xsl:template>
</xsl:stylesheet>
Wenn diese Transformation auf das folgende XML-Dokument angewendet wird:
<v name="myVarName">myValue</v>
das gewünschte Ergebnis produziert:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="myVarName">myValue</xsl:variable>
</xsl:stylesheet>
Dann wird der nächste Schritt sein wird, in Ihrem „Skript“ diese dynamisch generierte XSLT-Transformation zu starten.
Wenn Sie nur Ihr Beispiel ausführen, wird Ihre Antwort unterschiedlich beantwortet. Was tatsächlich herauskommt, ist: ' myValue xxx: variable> xxx: stylesheet> ' –
@blast_hardcheese, Es ist nicht garantiert, dass das Namespace-Präfix mit dem im Attribut 'result-prefix' der Deklaration' xsl: namespace-alias' angegebenen identisch ist - Es wird nur verwendet, um den ** Namensraum ** anzugeben, in den die Literal-Ergebnis-Elemente in der Ausgabe eingefügt werden sollen. Somit ist das tatsächlich zu verwendende Präfix vom XSLT-Prozessor abhängig. Saxon verwendet dasselbe Präfix wie das Attribut 'result-prefix'. Andere XSLT-Prozessoren haben jedoch die Freiheit, das zu verwenden, was ihre Entwickler für geeignet hielten. –
@blast_hardcheese, Sie wissen wahrscheinlich, dass, wenn in zwei XML-Dateien nur einige Präfixe (nicht die Namespace-URIs, an die sie gebunden sind) unterschiedlich sind, diese beiden XML-Dateien äquivalent sind. –