Thomas J.S.: EXSLT

Beitrag lesen

Hallo,

Nein, den Tool kenne ich nicht.
Meinst du die pre-Filters? http://www.deltaxml.com/dxml/library/guide-to-using-filters.html#dsy98_2-2

Ja genau die meine ich. Ich möchte gerne vor dem Vergleich falsche Leerzeichen (  bzw.  ) aus den XML Files rauslöschen und richtige Leerzeichen einsetzen (also ersetzen), damit DeltaXML Wort für Wort vergleicht.

Delta empfielt hier schon vorher im Java die Leerzeichen rauszunehmen:
http://www.deltaxml.com/dxml/library/how-to-manage-white-space/version/live
Die bieten ja selbst sowohl ein XSLT (normalize-space.xsl) als auch ein JavaClass dazu (com.deltaxml.pipe.filters.NormalizeSpace). Funktionieren die denn nicht?

Vielleicht ist aber schon mein Aufruf zum ersetzen der Leerzeichen falsch.

Ja ist er.

[contains(.,'Â ')]

Das "Â " ist die Darstellung des UTF-8 Zeichen in ANSI (z.B: ISO-8859-1). Sprich du würdest nur dann ein "Â " in deinem XML haben, wenn das XML durch irgendeinen Vorgang vom UTF-8 zu ANSI "dekodiert" (z.B. einfach im "falschen" Format abgespeichert) worden wäre.
Jedanfalls, wenn du "Â " und Konserten in deinem XML siehst, ist entweder dein Editor voll daneben (spich keine Unterstützung für UTF8), oder das XML ist unbrauchbar.

<xsl:template match="xhtml:div">
  xsl:copy
  <xsl:copy-of select="."/>
  xsl:choose
   <xsl:when test="//text()[contains(.,'Â ')]">

Du überprüfst den gesamten Text des Dokuments?

<xsl:value-of select="translate(., '&#xA0;', ' ')"/>
   </xsl:when>
   xsl:otherwise<!--xsl:apply-templates /--></xsl:otherwise>
  </xsl:choose>
  </xsl:copy>
</xsl:template>

Ich verstehe jetzt so nicht ganz, warum du es noch immer auf diese Weise versucht. Es sei denn dein XML ist wirklich unbrauchbar: d.h. du hast in der Tat "Â " da drinn stehen (auch in einem UTF fähigen Editor).
Dann kannst du das natürlich so ersetzen:
<xsl:when test=".//text()[contains(.,'Â ')]">
<xsl:value-of select="translate(.//text(), 'Â', '')"/>

Aber sonst einfach:
<xsl:value-of select="normalize-space(.//text())"/>

Grüße
Thomas