ThomasM: XSLT Problem mit xmlns bei Transform XML zu XML

Beitrag lesen

Hallo Katkrümel,

Wenn ich den Transfer mit dieser XSLT-Datei von der Software so ausführen lasse, erhalte ich als Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<rootNeu>
a
b
c
</rootNeu>

Füge ich bei xsl:apply-templates das Attribut select="KnotenAlt" hinzu, sieht das Ergebnis so aus:

<?xml version="1.0" encoding="UTF-8"?>
<rootNeu />

Ich bin langsam am Verzweifeln. Kann es sein, dass unser Programm nur mit XSLT Version 1.0 arbeitet und wenn ja, gibt es dort auch eine Lösung für mein Problem?

Mit Saxon-HE 9.8.0.7 brauchte ich unter XSLT 2.0 die zusätzliche Angabe von xpath-default-namespace bei diesem Template-Aufruf:

<xsl:template match="KnotenAlt" xpath-default-namespace="programm.export">
  <!-- … -->
</xsl:template>

Dann erscheint die erwartete Ausgabe.

Wenn nur ein XSLT-1.0-Prozessor verfügbar ist, dann hilft die Angabe eines "Dummy-Namespace-Prefixes" mit dem jeweiligen Namensraum, hier als "pe" deklariert:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pe="programm.export"
  exclude-result-prefixes="pe" version="1.0">
  <xsl:template match="/">
    <rootNeu>
      <xsl:apply-templates/>
    </rootNeu>
  </xsl:template>
  <xsl:template match="pe:KnotenAlt">
    <KnotenNeu>
      <Unterknoten>
        <ElementNeu1>
          <xsl:value-of select="pe:Element1"/>
        </ElementNeu1>
      </Unterknoten>
      <Unterknoten2>
        <ElementNeu2>
          <xsl:value-of select="pe:Element2"/>
        </ElementNeu2>
        <ElementNeu3>
          <xsl:value-of select="pe:Element3"/>
        </ElementNeu3>
      </Unterknoten2>
    </KnotenNeu>
  </xsl:template>
</xsl:transform>

Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<rootNeu>
  <KnotenNeu>
    <Unterknoten>
      <ElementNeu1>a</ElementNeu1>
    </Unterknoten>
    <Unterknoten2>
      <ElementNeu2>b</ElementNeu2>
      <ElementNeu3>c</ElementNeu3>
    </Unterknoten2>
  </KnotenNeu>
</rootNeu>


Grüße,
Thomas