Kann ich einen Standard-Namespace in meinem XSL-Stylesheet angeben, für jedes Element erstellt?

StackOverflow https://stackoverflow.com/questions/1404756

  •  05-07-2019
  •  | 
  •  

Frage

Ich bin mit .NET XML-Daten aus einem Datensatz zu transformieren, um das Sitemap Format. Hier ist, wo ich gerade bin. Wie Sie sehen können, schaffe ich das Wurzelelement mit dem richtigen Namespace. Ich habe bemerkt, dass, wenn ich Kind-Knoten erstellt, sie alle haben ein leeres xmls-Attribut (<url xmlns="">...</url>), es sei denn, ich den Namespace angegeben, wenn ich das Element in der Vorlage zu erstellen.

Es ist nicht sehr trocken. ist es eine Möglichkeit, den Namensraum von allen Elementen zu definieren, die erstellt werden?

<xsl:template match="/">
    <!-- Root element has a namespace -->
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
        <xsl:apply-templates/>
    </urlset>
</xsl:template>

<xsl:template match="Document">
    <!-- Do it this way to prevent empty xmlns attribute on element -->
    <xsl:element name="url" namespace="http://www.sitemaps.org/schemas/sitemap/0.9">
        <!-- This element will get the empty xmlns attribute, unless I create it like the url element -->
        <location>
            <xsl:value-of select="Path" />
        </location>
        <!-- There are more elements to create here, do I have to specify the namespace each time? -->
    </xsl:element>
</xsl:template>

Danke!

War es hilfreich?

Lösung

Geben Sie den Standard-Namespace auf die Wurzel des Stylesheets.

<xsl:stylesheet version="1.0" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Oder, meiner Meinung nach einer bevorzugten Lösung, einen Präfix an der Wurzel definieren und verwenden Sie es später für Ihre Elemente:

<xsl:stylesheet version="1.0" xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <sm:urlset>
            <xsl:apply-templates/>
        </sm:urlset>
    </xsl:template>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top