XSLT / XPath translate() / $apos
snow_white
- xsl
0 yetanotheruser0 Thomas J.S.0 snow_white
Hallo,
ich möchte gern das Apostroph ($apos) mit der XPath-Funktion translate() in einen Unterstrich umwandeln.
In einem Forum im Internet habe ich einen Eintrag hierzu von Michael Kay gelesen:
URL: http://www.stylusstudio.com/xsllist/200701/post90250.html
XML:
<buch TEXT="Hermine's book" />
XSLT:
...
<xsl:template match="book">
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(@TEXT, $apos, '_')"/>
</xsl:template>
...
Output:
Hermine' book
Komischerweise wird das Apostroph nicht in einen Unterstrich umgewandelt. Dafür wird der Buchstabe danach gelöscht.
Die anderen Möglichkeiten um ein Apostroph auszuzeichen, die ich im Internet gefunden habe, funktionieren alle leider nicht:
<xsl:value-of select="translate(@TEXT, "$apos;$quot;, '_')"/>
<xsl:value-of select="translate(@TEXT, "'$quot;, '_')"/>
Ich benutze für die Transformation übrigens die Standard-Engine vom AltovaXMLSpy.
Vielen Dank im voraus für Eure Hilfe.
Viele Grüße
snow_white
Output:
Hermine' bookKomischerweise wird das Apostroph nicht in einen Unterstrich umgewandelt. Dafür wird der Buchstabe danach gelöscht.
Die anderen Möglichkeiten um ein Apostroph auszuzeichen, die ich im Internet gefunden habe, funktionieren alle leider nicht:
<xsl:value-of select="translate(@TEXT, "$apos;$quot;, '_')"/>
<xsl:value-of select="translate(@TEXT, "'$quot;, '_')"/>Ich benutze für die Transformation übrigens die Standard-Engine vom AltovaXMLSpy.
Schon mal einfach translate( //@text, "'", "_") versucht? Ich kanns gerade nicht mit Altova testen, aber das sollte schon hinhauen.
Gruß Ben
Oder das ' escapen.
translate( //@text, ''', '_')
Gruß Ben
Hallo Ben,
vielen Dank für Deine Mithilfe.
translate( //@text, ''', '_')
Leider funktioniert das nicht.
Ich erhalte foldende Fehlermeldung:
Ungültiger XPath 2.0-Ausdruck
Unerwartetes Token -"_'
Viele Grüße
snow_white
Hallo,
Schon mal einfach translate( //@text, "'", "_") versucht? Ich kanns gerade nicht mit Altova testen, aber das sollte schon hinhauen.
Das wird nicht funktionieren.
select="translate( //@text, " --> alles ab hier wirft einen Fehler, weil das Attribut für den Prozessor beendet ist.
Grüße
Thomas
Das wird nicht funktionieren.
select="translate( //@text, " --> alles ab hier wirft einen Fehler, weil das Attribut für den Prozessor beendet ist.Grüße
Thomas
Jo, der Codeschnipsel war Schmarrn.
Gruß Ben
Hallo,
ich möchte gern das Apostroph ($apos) mit der XPath-Funktion translate() in einen Unterstrich umwandeln.
In einem Forum im Internet habe ich einen Eintrag hierzu von Michael Kay gelesen:
URL: http://www.stylusstudio.com/xsllist/200701/post90250.html
Komischerweise wird das Apostroph nicht in einen Unterstrich umgewandelt. Dafür wird der Buchstabe danach gelöscht.
Ich benutze für die Transformation übrigens die Standard-Engine vom AltovaXMLSpy.
<data>
Hermine's Buch
</data>
--------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/data">
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(., $apos, '_')" />
</xsl:template>
</xsl:stylesheet>
------
Hermine_s Buch
Gestest mit
AltovaXML Version 2007 rel. 3
build: May 31 2007
und mit Saxon8b
Grüße
Thomas
Hallo Thomas,
vielen Dank für Deine schnelle Antwort.
Dein Beispiel funktioniert bei mir auch.
<data>
Hermine's Buch
</data><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/data">
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(., $apos, '_')" />
</xsl:template>
</xsl:stylesheet>Hermine_s Buch
Bei mir ist das Apostroph aber leider in einem Attribut und damit geht es leider nicht. :-/
Viele Grüße
snow_white
Dann verknüpf doch einfach die ganzen Antworten?
<xsl:template match="book">
<xsl:variable name="apo">'</xsl:variable>
<xsl:value-of select="translate(//@text, $apo, '_')"/>
</xsl:template>
Sollte genauso gehen:
<xsl:template match="book">
<xsl:variable name="apo">'</xsl:variable>
<xsl:value-of select="translate(.@text, $apo, '_')"/>
</xsl:template>
Gruß Ben
Hallo,
vielen Dank für Deine schnelle Antwort.
Dein Beispiel funktioniert bei mir auch.<data>
Hermine's Buch
</data><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/data">
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(., $apos, '_')" />
</xsl:template>
</xsl:stylesheet>Hermine_s Buch
Bei mir ist das Apostroph aber leider in einem Attribut und damit geht es leider nicht. :-/
Das kann ich nicht nachvollziehen (Testdaten so geändert):
<data title="Hermine's Buch" />
<xsl:value-of select="translate(@title, $apos, '_')" />
Die ausgabe ist noch immer dieselbe.
In welchem Kontext versucht du das Attribute auszulesen?
Grüße
Thomas
Hallo Thomas,
Das kann ich nicht nachvollziehen (Testdaten so geändert):
<data title="Hermine's Buch" />
<xsl:value-of select="translate(@title, $apos, '_')" />
Die ausgabe ist noch immer dieselbe.
In welchem Kontext versucht du das Attribute auszulesen?
Ich möchte halt nicht nur das Apostraph in meinem Fall umwandeln, sondern gleichzeitig auch noch ein paar andere Zeichen.
Wenn ich es so umsetze, wie hier:
...
<xsl:attribute name="href">
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(@TEXT, '?!- $apos', '_____')" />
</xsl:attribute>
...
dann wird das Apostroph nicht umgewandelt und der Buchstabe nach dem Apostroph und der zweite vor dem Apostroph werden gelöscht.
Viele Grüße
snow_white
Viele Grüße
snow_white
Hallo,
<xsl:attribute name="href">
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(@TEXT, '?!- $apos', '_____')" />
</xsl:attribute>
...dann wird das Apostroph nicht umgewandelt
Klar, weil du das innerhalb vom ' ' hast, also wird dan $, a, p, o, s gesucht.
<data title="Her?mi-ne's Bu!ch" />
<xsl:value-of select="translate(@title, concat('?!- ', $apos), '_____')" />
Ausgabe: Her_mi_ne_s_Bu_ch
Grüße
Thomas
Hallo Thomas,
super!:o)
<data title="Her?mi-ne's Bu!ch" />
<xsl:value-of select="translate(@title, concat('?!- ', $apos), '_____')" />Ausgabe: Her_mi_ne_s_Bu_ch
So funktioniert es.
Vielen vielen Dank.
Viele Grüße
snow_white
Hallo Thomas,
ich habe es jetzt noch ein paar Mal getestet und in meiner Beispieldatei funktioniert das Ersetzen des Apostrophs durch einen Unterstrich jetzt doch, obwohl ich ein Attribut verwende.
Leider funktioniert es aber nicht korrekt in meiner Hauptdatei.
Viele Grüße
snow_white