Simon Reinhardt: Anführungszeichen in XPath-Ausdruck encoden

Hi!

Jetzt habe ich schon stundenlang gesucht, aber in keiner Spezifikation scheint dazu genaueres drin zu stehen...

Nehmen wir an, ich habe in einem XPath-Ausdruck einen String, der ein Apostroph enthalten soll (da dieser String selbst mit der Xalan-Erweiterungsfunktion evaluate als XPath-Ausdruck ausgewertet werden soll):
<xsl:apply-templates select="...'''..." />
Hier wird natürlich ein Fehler gemeldet. Versuche, das Apostroph mit einem Backslash zu encoden, schlagen fehl. Gibt es überhaupt eine Möglichkeit, sowas in XPath zu notieren, oder ist das gar nicht vorgesehen?

VG->Cologne
Simon

  1. Hoi,

    Nehmen wir an, ich habe in einem XPath-Ausdruck einen String, der ein
    Apostroph enthalten soll (da dieser String selbst mit der
    Xalan-Erweiterungsfunktion evaluate als XPath-Ausdruck ausgewertet werden
    soll):
    <xsl:apply-templates select="...'''..." />
    Hier wird natürlich ein Fehler gemeldet. Versuche, das Apostroph mit einem
    Backslash zu encoden, schlagen fehl. Gibt es überhaupt eine Möglichkeit, sowas
    in XPath zu notieren, oder ist das gar nicht vorgesehen?

    Warum nimmst du nicht das naheliegenste: "

    Gruesse,
     c.j.k

    1. Hallo Christian,

      Warum nimmst du nicht das naheliegenste: "

      weil " nicht Apostroph ist?

      Grüße
      Thomas

      1. Hoi Thomas,

        Warum nimmst du nicht das naheliegenste: "

        weil " nicht Apostroph ist?

        Er hat ja auch nach 'Anfuehrungsstrichen' gefragt in der Ueberschrift.

        Gruesse,
         c.j.k

        1. Hallo Christian,

          Warum nimmst du nicht das naheliegenste: "

          weil " nicht Apostroph ist?

          Er hat ja auch nach 'Anfuehrungsstrichen' gefragt in der Ueberschrift.

          und was schreibt er in seiner Frage?
          oder das müssen wir nicht mehr lesen? ;-)

          Schöne Grüße
          Thomas

        2. Hi zusammen!

          Er hat ja auch nach 'Anfuehrungsstrichen' gefragt in der Ueberschrift.

          Ich meinte das einfache Anführungszeichen ;-)

          Warum nimmst du nicht das naheliegenste: "

          Nein, selbst mit ' geht es nicht. Der XML-Parser wandelt es um und gibt es als ' an die XSLT-Engine, welche dann wieder meckert, weil '...'...' da steht. Gebe ich hingegen &apos; ein, dann macht er mir '...'...' daraus - damit kann die XSLT-Engine auch nicht gerade viel anfangen.

          Aber ich hab das Problem jetzt über sehr große Umwege gelöst. Eigentlich wollte ich ja einen String als XPath-Ausdruck interpretieren (geht mit der Xalan-Funktion evaluate), also:
          <xsl:apply-templates select="xalan:evaluate('xpath-ausdruck')" />
          Allerdings enthält dieser XPath-Ausdruck wiederum eine Funktion, die einen String-Wert erwartet (document-Funktion). Deshalb dachte ich mir: ich kann diesen String-Wert ja auch einfach in eine Variable packen und dort eingeben:
          <xsl:variable name="$url" value="substring-before(@href, '#')" />
          <xsl:apply-templates select="xalan:evaluate('document($url)')" />
          Aber denkste: Xalan sagt mir, er kennt die Variable an dieser Stelle nicht (der gleiche Ausdruck in einem value-of führt zum gewünschten Ergebnis, also hat apply-templates wahrscheinlich einen eigenen Kontext, in dem die Variablenbindung unbekannt ist).
          Letzte Rettung: ich führe den Ausdruck vorher aus und übergebe das Resultset an apply-templates:
          <xsl:variable name="url" select="substring-before(@href,'#')" />
          <xsl:variable name="resultset" select="xalan:evaluate(concat('document($url,/)/', @query))" />
          <xsl:apply-templates select="$resultset" />
          Und so läuft's jetzt.

          Nein, das müsst Ihr jetzt nicht alles verstehen, aber danke für's Zuhören ;-)

          VG->Cologne
          Simon

  2. Hi Simon,

    Hier wird natürlich ein Fehler gemeldet. Versuche, das Apostroph mit einem Backslash zu encoden, schlagen fehl. Gibt es überhaupt eine Möglichkeit, sowas in XPath zu notieren, oder ist das gar nicht vorgesehen?

    doch, du kannst ' benutzen um einen Apostroph zu kodieren. " ist ein Anführungszeichen.

    Gruß,
    Martin

  3. hallo Simon,

    Jetzt habe ich schon stundenlang gesucht, aber in keiner Spezifikation scheint dazu genaueres drin zu stehen...

    Nehmen wir an, ich habe in einem XPath-Ausdruck einen String,

    http://www.w3.org/TR/xpath#strings

    http://www.w3.org/TR/1998/REC-xml-19980210#AVNormalize

    Gibt es überhaupt eine Möglichkeit, sowas in XPath zu notieren, oder ist das gar nicht vorgesehen?

    du kannst unicode für den Apostroph verwenden.

    Grüße
    Thomas