Thomas J.S.: EXSLT

Beitrag lesen

Hallo,

Ansonsten kannst du es mit einem anderen "Trick" versuchen:
<xsl:when test="string-length(translate(normalize-space(text()), ' ', '')) = 0"></xsl:when>

Das hat leider nicht funktioniert.

Das kann ich so einfach nicht glauben (ich habe es mit vier versch. Prozessoren getestet!):

<xsl:template match="Kapitel">
  xsl:choose
   <xsl:when test="string-length(translate(normalize-space(text()), ' ', '')) = 0"></xsl:when>
   xsl:otherwise
    <xsl:copy-of select="."/>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>

macht genau was es soll, nämlich:

In dem XML gibt es Tags bei denen z.Bsp. 1 Zeilenumbruch und 3 Tabulatoren drin sind oder 1 Zeilenumbruch und 4 Tabulatoren u.s.w. Damit ich diese nicht alle per

<xsl:when test ="text() = '&#10;&#9;&#9;&#9;'"/>

raussuchen muss wollte ich lieber überprüfen, ob Buchstaben oder Zahlen im Text enthalten sind. Wenn Buchstaben drin sind könnten aber auch Leerzeichen oder Zeilenumbrüche enthalten sein, welche ich nicht ersetzen möchte.

Der Test überprüft indirekt ob andere Zeichen als Leerraumzeichen vorhanden sind.

normalize-space(text())
Macht aus den Tabs, Zeilenumbrüchen normale Leerzeichen
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#normalize_space
du kannst statt text() auch nur " . "(den aktuellen Knoten) angeben.

translate(normalize-space(text()), ' ', '') ersetzt dann die Leerzeichen durch 'nichts', so dass wenn es im element keine andere zeichen als Leerraumzeichen waren, jetzt das Element leer ist.
string-length() zählt die anzal der verbliebenen Zeichen im text(), wenn die jetzt 0 ist, hatte das Element keine andere als Leerraumzeichen drinn.

Wie gesagt, das funktioniert auch so.
Wenn es bei dir nicht macht, (welcher XSLT-Prozessor?) sind da eben andere Zeichen als die in XML erlaubten Leerraumzeichen im Element.

Grüße
Thomas