Joy: doppelte Ausgabe

Hallo,

ich sitze nun schon eine Weile an einem Problem und komme einfach nicht dahinter, wieso es nicht klappt. Also ich habe ein XML File, welches Text mit xhtml:br enthält, wobei ein Teil verschachtelt ist. Die xhtml:br möchte ich ersetzen durch <![CDATA[<br/> ]]>. Mein XSL-File macht das auch, gibt aber dann den Text nochmal mit aus und das mittendrin.

Mein xml File
...
xhtml:div
Text1 xhtml:br/
Text2 xhtml:br/
Text3 xhtml:br/
Text mit Titel <Titel>Hallo</Titel> und Text
</xhtml:div>
...

Hier meine XSL File Inhalt:

<xsl:template match="*">
  xsl:copy
 <xsl:copy-of select="@*" />
 <xsl:apply-templates />
  </xsl:copy>
</xsl:template>

<xsl:template match="xhtml:div/*" >
  xsl:choose
 <xsl:when test="name() = 'br'">
     <![CDATA[<br/> ]]>
 </xsl:when>
 xsl:otherwise
    <xsl:copy-of select="."/>
    <xsl:if test="position() != last()">
       <xsl:apply-templates />
    </xsl:if>
 </xsl:otherwise>
  </xsl:choose>
</xsl:template>

Die Ausgabe ist dann
xhtml:divText1 <br/> Text2 <br/> Text3 <br/> Text mit Titel Text1 Text2 Text3 Text mit Titel <Titel>Hallo Hallo</Titel> und Text und Text</xhtml:div>

Was müsste ich anders machen damit es so aussieht:
xhtml:divText1 <br/> Text2 <br/> Text3 <br/> Text mit Titel <Titel>Hallo </Titel> und Text</xhtml:div>

Gruß
joy

  1. Hallo

    sollte es doch jemanden geben der das hier liest. Bei nem Kumpel hats funktioniert. Wir haben auch gleich das xslt verbessert auf

    <xsl:template match="*">
      xsl:copy
       <xsl:copy-of select="@*" />
       <xsl:apply-templates />
      </xsl:copy>
     </xsl:template>

    <xsl:template match="xhtml:br" >
       <![CDATA[<br/> ]]>
      <xsl:apply-templates />
     </xsl:template>

    Bei ihm klappt es, aber bei mir nicht. Woran könnte das liegen?

    Gruß
    Joy

    1. Hallo,

      sollte es doch jemanden geben der das hier liest. Bei nem Kumpel hats funktioniert. Wir haben auch gleich das xslt verbessert auf

      <xsl:template match="*">
        xsl:copy
         <xsl:copy-of select="@*" />
         <xsl:apply-templates />
        </xsl:copy>
      </xsl:template>

      <xsl:template match="xhtml:br" >
         <![CDATA[<br/> ]]>
        <xsl:apply-templates />
      </xsl:template>

      Das ist schon fast korrekt.

      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" version="1.0">
       <xsl:template match="*">
        xsl:copy
         <xsl:for-each select="@*">
          <xsl:copy-of select="." />
         </xsl:for-each>
         <xsl:apply-templates />
        </xsl:copy>
       </xsl:template>
       <xsl:template match="xhtml:br">
        <![CDATA[<br/> ]]>
       </xsl:template>
      </xsl:stylesheet>

      Ausgabe:
      <?xml version="1.0" encoding="utf-8"?>
      <data>
       <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml">
        Text1
        &lt;br/&gt;

      Text2
        &lt;br/&gt;

      Text3
        &lt;br/&gt;

      Text mit Titel <Titel>Hallo</Titel> und Text
       </xhtml:div>

      </data>

      Bei ihm klappt es, aber bei mir nicht. Woran könnte das liegen?

      Keine Ahnung. "bei mir klappt nicht" ist keine Fehlerbeschreibung.

      Grüße
      Thomas