XSL-Ausgabe-XML ohne Präfix ohne Verwendung des Standard-Namespaces?

Ich besitze eine XSL-Version, in der ich die folgende Ausgabe generieren muss:

<moo xmlns="http://api.example.com">
    <foo>1358944586848</foo>
    <bar>
        <a>1</a>
        <b>2</b>
        <c>3</c>
    </bar>
</moo>

Ich könnte es so machen:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://api.example.com">

    <xsl:template match="/">
        <xsl:element name="moo">
            <!-- and so on -->

Allerdings hasse ich es, das xsl-Präfix in meinen xsl-Dateien zu verwenden, weil ich das Gefühl habe, dass es sehr unübersichtlich ist. Das Auswählen mit XPath ist sowieso einfach, da Sie festlegen könnenxpath-default-namespace zu allem, was Sie bei Bedarf umwandeln. Aber es gibt keinenelement-default-namespace Wie kann ich also die gewünschte Ausgabe auf eine gute Weise generieren?

Ich weiß ich kann das:

<stylesheet version="2.0"
    xmlns="http://www.w3.org/1999/XSL/Transform">

    <template match="/">
        <element name="moo" namespace="http://api.example.com">
            <!-- and so on -->

Aber dann muss ich diesen Namespace explizit für jedes einzelne Element festlegen, das ich erstelle, oder sie erhalten stattdessen den XSL-Namespace. Gibt es also eine saubere Möglichkeit, Elemente mit einem bestimmten Namespace (ohne Präfix) zu erstellen und den Standardnamespace der xsl-Datei nicht zu berühren?

Aktualisieren:

Dachte vielleichtnamespace-alias könnte etwas tun, kann aber nicht herausfinden, wie man es benutzt. Versuchte dies, aber es scheint keinen Unterschied in der Ausgabe zu machen:

<stylesheet version="2.0"
    xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:out="http://api.example.com">

<namespace-alias stylesheet-prefix="out" result-prefix=""/>

    <template match="/">
        <element name="out:moo">
            <!-- and so on -->

Dasnamespace-alias Das Ding tut wahrscheinlich nicht das, was ich denke: p

Die endgültige Lösung, die ich verwendet habe, basiert auf der Antwort von JLRishe

remove-prefixes.xsl

<?xml version="1.0" encoding="UTF-8"?>
<stylesheet version="2.0" xmlns="http://www.w3.org/1999/XSL/Transform">
    <template match="/">
        <variable name="result">
            <next-match />
        </variable>
        <apply-templates select="$result" mode="remove-prefixes" />
    </template>

    <template match="*" priority="1" mode="remove-prefixes">
        <element name="{local-name()}" namespace="{namespace-uri()}">
            <apply-templates select="@* | node()" mode="remove-prefixes" />
        </element>
    </template>
    <template match="@*|node()" mode="remove-prefixes">
        <copy>
            <apply-templates select="@* | node()" mode="remove-prefixes" />
        </copy>
    </template>

</stylesheet>

subject.xsl

<!-- snip -->
<import href="remove-prefixes.xsl" />
<!-- snip -->

Antworten auf die Frage(3)

Ihre Antwort auf die Frage