Frage

Ich möchte das folgende Element erstellen:

<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">

Wenn ich so etwas wie folgt aus:

<xsl:element name="excercises">
<xsl:attribute name="xmlns:xsi" namespace="http://www.w3.org/2001/XMLSchema-instance"/>

Dann erstellt es soemthing wie folgt aus:

<excercises xp_0:xsi="" xmlns:xp_0="http://www.w3.org/2001/XMLSchema-instance">

Was aussehen tut, was ich will ...

War es hilfreich?

Lösung

Versuchen Sie Folgendes statt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.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:template match="@* | node()">
        <xsl:apply-templates select="xml"></xsl:apply-templates>
    </xsl:template>

    <xsl:template match="xml">
        <xsl:element name="exercises">
            <xsl:attribute name="xsi:noNamespaceSchemaLocation">mySchema.xsd</xsl:attribute>
            some value
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

Das Hauptanliegen ist es, den xsi-Namespace in der Erklärung zu erklären.

Ich habe gerade die Vorlage Spiel auf gerade aus zu testen.

Andere Tipps

Hier ist, wie dies getan werden kann: :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 exclude-result-prefixes="xsi">
    <xsl:output omit-xml-declaration="yes"/>
    <!--                                   -->
    <xsl:template match="/">
      <exercises  xsi:noNamespaceSchemaLocation="mySchema.xsd"/>
    </xsl:template>
</xsl:stylesheet>

Wenn diese Transformation angewendet wird, auf einer beliebigen Quelle XML-Dokument (nicht benutzt), wird das gewünschte Ergebnis erzeugt:

<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

Es ist nicht notwendig <xsl:attribute> in Ihrem Fall zu verwenden, aber wenn nötig, kann es ohne Probleme verwendet werden:

    <xsl:attribute name="xsi:noNamespaceSchemaLocation">
      <xsl:value-of select="'mySchema.xsd'"/>
    </xsl:attribute>

Sie beachten Sie, dass es eine gute Praxis ist, die erforderlichen Namespaces am <xsl:stylesheet> Element , um einfach zu definieren, so dass sie leicht (wieder) verwendet überall sein können sie gebraucht werden. Dies ist besonders nützlich, wenn ein bestimmte Namensraum auf mehr als einem generierten Elemente oder Attribute benötigt werden.

In diesem Fall ist es auch gut ist, alle solche Präfixe in dem Wert des exclude-result-prefixes Attribut , so dass die Namensräume werden nicht automatisch auf alle wörtlichen Ergebniselemente vermehrt werden.

Sie können einfach verwenden: -

<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">

Direkt in Ihrem XSL, das funktionieren würde, nur wirklich brauchen xsl: Element kann nicht hart Code des Tag-Name. Ähnlich ist es mit Attributen können Sie diese direkt hinzufügen, wenn Sie abhängig machen müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top