Announcement

Collapse
No announcement yet.

Problem mit replace() und &

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit replace() und &

    Hallo zusammen!

    Ich habe hier ein XSLT Script zur Konvertierung einer XML in eine LaTeX Datei.
    Mein Problem ist, dass die replace Funktion anscheinend kein & (bzw. & ) mag! Ziel ist es alle &'s zu escapen, damit LaTeX damit arbeiten kann.

    Diese Funktion wird für die Inhalte aufgerufen:
    <xsl:function name="tex:replace_postnl">
    <xslaram name="string"/>
    <xsl:variable name="t" select="replace($string, 'Netherlands', 'NETHERLANDS')"/>
    <xsl:variable name="t" select="replace($t, '&amp;', '\\&amp;')"/>
    <xsl:value-of select="$t"/>
    </xsl:function>

    Dabei fällt auf, dass 'Netherlands' richtig ersetzt wird, die &amp; aber nach aufruf des Scripts immer noch ohne \ dastehen!

    Das merkwürdigste daran ist, dass das gesamte xslt-Script inklusive dieser Funktion auf einem anderen Rechner ohne Probleme läuft, also jedes & korrekt ersetzt!

    Ich benutze übrigens Saxon als Interpreter und die Version ist auf beiden Rechnern die gleiche!

    Wäre froh wenn mir jemand helfen könnte, ich hänge nun schon was länger an diesem Problem

    Grüße,
    Messenjah

  • #2
    Mich wundert die zweifache Belegung der Variablen $t. Variablen sind quasi Konstanten: frei wählbar, danach aber fest. Sie können je nach Kontext neu erzeugt werden, etwa innerhalb von xsl:for-each oder pro aufgerufener xsl:function, aber eine Variable kann nicht mit identischem Namen aus einer gleichnamigen existierenden entstehen.

    Comment


    • #3
      Danke schonmal für den Hinweis!

      Ich muss ganz ehrlich sagen, dass ich kaum Ahnung von XSLT habe und die funktion(en) auch nicht von mir geschrieben wurde.
      Allerdings gibt es hier mehrere Funktionen, die eine Variable t immer wieder neu belegen und da funktioniert es!

      Also eigentlich kann es das nicht sein...

      edit: Habe die Rückgabe der zweiten replace Funtion mal in eine Variable x geschrieben und das Problem bleibt bestehen!

      Comment


      • #4
        Ich habe die Funktion mal mit Saxon 9.0 und AltovaXML 2008 getestet und sie funktioniert:

        <xsl:value-of select="tex:replace_postnl('&amp;Netherlands')"/> ergibt die Ausgabe \&amp;NETHERLANDS. Diese Art der Variablennutzung, also $t ergibt sich direkt aus $t habe ich offenbar als eine der wenigen XSLT 2.0-Techniken nicht praktiziert bzw. in meinen Math-Funktionen nicht benötigt und so auch in der Spezifikation nicht direkt gelesen.

        Offenbar funktioniert:
        <xsl:variable name="a" select="1"/>
        <xsl:variable name="a" select="$a+1"/>
        <xsl:variable name="a" select="$a+1"/>
        <xsl:value-of select="$a"/><!-- 3 -->

        Naja, man lernt nur dazu ;-).

        Ansonsten wäre mal noch ein Blick auf die Technik von xsl:character-map nützlich, um bestimmte Zeichen zu ersetzen.

        Comment


        • #5
          Ja das merkwürdige ist ja grade, dass das ganze auf einem Rechner funktoiniert und auf einem anderen nicht!?!
          Hab mir auch schon überlegt, ob es am Encoding der Eingabedatei liegt, aber da hab ich mittlerweile auch schon alles ausprobiert.

          Ich denke ich probiere mal den Umweg über die character maps, allerdings habe ich das Gefühl, dass er das &amp; in der Eingabedatei einfach nicht erkennt. Und dann würde er es ja auch mittels den Maps nciht ersetzen!

          Naja wenigstens hab ich dein Wissen etwas erweitern können!

          Comment


          • #6
            So das Problem ist gelöst!

            Mit den Character Maps funktioniert das Ersetzen einwandfrei! Ich habe zwar immer noch nicht so wirklich verstanden, warum das ganze nicht so läuft, wie ich mir das zunächst gedacht hatte, aber hauptsache es läuft

            Danke für die Hilfe!

            Comment

            Working...
            X