Thomas J.S.: DRINGEND: Tags in Attribut durch HTML-Tags ersetzen

Beitrag lesen

Hallo,

<Text Memo="..." Bezeichnung="Das ist ein <break/> Test"/>

Das ist mehr als nur schlecht.
Da muss jeder XML-Parser sofort schreien: Das Zeichen < kann in einem Attributwert nicht verwendet werden!

Der Attributinhalt kommt unformatiert aus einer Datenbank und ist dort als Memo-Feld mit festen Formatierungen hinterlegt. Wir möchten im COM-Objekt eine Umwandlung vornehmen und müssen an entsprechender Stelle ein <break> o.ä. einfügen was bei der Transfortmation in HTML entsprechend umgesetzt wird.

Bitte aber keine!!! Elemente in Attributwerten!
Dann lass es doch einen CR (carriage return)an der Stelle einfügen, wo der Zeilenumbruch kommen soll.
Das kannst du dann leicht ersetzen:

<xsl:template name="cr2br">
 <xsl:param name="text" />
 <xsl:variable name="textnachumbruch" select="substring-after($text, '&#xA;')" />
 xsl:choose
  <xsl:when test="contains($text, '&#xA;')">
   <xsl:value-of select="substring-before($text, '&#xA;')" />
   <br />
   <xsl:call-template name="cr2br">
   <xsl:with-param name="text" select="$textnachumbruch" />
   </xsl:call-template>
  </xsl:when>
  xsl:otherwise
   <xsl:value-of select="$text" />
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>

Dann:
<xsl:template match="@Bezeichnung">
 <xsl:call-template name="cr2br">
 <xsl:with-param name="text" select="." />
</xsl:call-template>
</xsl:template>

Der Rest wie gewohnt.

Grüße
Thomas