Frage

Ich habe ein XML-Dokument mit un-Namespace-Elemente, und ich möchte XSLT verwenden Namespaces, um sie hinzuzufügen. Die meisten Elemente werden im Namensraum A sein; ein paar in Namespace B. sein Wie mache ich das?

War es hilfreich?

Lösung

Mit foo.xml

<foo x="1">
    <bar y="2">
        <baz z="3"/>
    </bar>
    <a-special-element n="8"/>
</foo>

und foo.xsl

    <xsl:template match="*">
        <xsl:element name="{local-name()}" namespace="A" >
            <xsl:copy-of select="attribute::*"/>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="a-special-element">
        <B:a-special-element xmlns:B="B">
            <xsl:apply-templates match="children()"/>
        </B:a-special-element>
    </xsl:template>

</xsl:transform>

ich

<foo xmlns="A" x="1">
    <bar y="2">
        <baz z="3"/>
    </bar>
    <B:a-special-element xmlns:B="B"/>
</foo>

Ist das, was Sie suchen?

Andere Tipps

Sie müssen zwei Hauptzutaten für dieses Rezept.

Die Sauce Lager werden die Identität verwandeln und der Haupt Geschmack wird durch das namespace Attribut gegeben werden, um xsl:element .

Die folgenden, nicht getesteten Code sollte die http://example.com/ Namespace auf alle Elemente.

<xsl:template match="*">
  <xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
</xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

Persönliche Nachricht: Hallo, Jeni Tennison. Ich weiß, dass Sie dies lesen.

Hier ist, was ich bisher:

<xsl:template match="*">
    <xsl:element name="{local-name()}" namespace="A" >
        <xsl:apply-templates />
    </xsl:element>
</xsl:template>

<xsl:template match="a-special-element">
    <B:a-special-element xmlns:B="B">
      <xsl:apply-templates />
    </B:a-special-element>
</xsl:template>

Diese fast funktioniert; das Problem ist, dass es nicht das Kopieren von Attributen werden. Von dem, was ich gelesen habe thusfar, xsl: element hat keine Möglichkeit, alle Attribute aus dem Elemente zu kopieren, wie sie ist (use-attribute-sets erscheinen nicht zu schneiden).

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