XSLT XML-Dokument angelegt mit xmlns Attribute
-
05-07-2019 - |
Frage
Ich Anlegen eines XSLT-Stylesheet auf die folgende XML-Datei:
<top xmlns="http://www.foo.com/bar">
<elementA />
<elementB />
<contents>
<contentitem>
<id>3</id>
<moretags1 />
<moretags2 />
</contentitem>
<contentitem>
<id>2</id>
<moretags1 />
<moretags2 />
</contentitem>
<contentitem>
<id>1</id>
<moretags1 />
<moretags2 />
</contentitem>
</contents>
</top>
Hier ist meine aktuelle XSLT-Datei (eine einfache Art führt):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:doc="http://www.foo.com/bar">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<!-- -->
<xsl:strip-space elements="*"/>
<!-- -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- -->
<xsl:template match="contents">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="contentitem">
<xsl:sort select="id" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Das Problem ist, ich weiß nicht genau, wie die 'doc:' verwenden Namespacepräfix mit dem xsl: template und xsl: apply-templates-Tags
.Im Moment wird das XML-Dokument kopiert, wie sie ist, so glaube ich, die erste xsl: template Block angewandt wird. Allerdings sind die Elemente unsortiert, so dass ich denke, das Problem liegt in der zweiten xsl:. Template
Das sollte ich beachten, wenn ich die xmlns entfernen aus beiden Dateien Attribute, die Transformation funktioniert.
Irgendwelche Vorschläge?
(Frage basiert auf dieses Beispiel )
Lösung
Haben Sie versucht, Elementnamen mit dem doc:
Namespacepräfix in Ihre Attribute auswählen prefixing?
<xsl:template match="doc:contents">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="doc:contentitem">
<xsl:sort select="doc:id" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>