Announcement

Collapse
No announcement yet.

XPath: Unterschied Strings mit " und ' escapeable characters

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

  • XPath: Unterschied Strings mit " und ' escapeable characters

    Hallo.

    Wo genau liegt der Unterschied zwischen Strings in " und '? Wie werden diese innerhalb eines Strings escaped?

    Greetz
    DAB268

  • #2
    Es gibt keinen Unterschied, sowohl ' als auch " können als Begrenzerzeichen eines Stringliterals benutzt werden.
    Das Maskieren ist aber in XPath 1.0 nicht möglich, in XPath 2.0 sehr wohl durch Verdoppelung:
    Code:
    'Dies ist eine XPath 2.0 Zeichenkette mit einem maskierten '' Zeichen.'
    "Dies auch ""."

    Comment


    • #3
      Und welche Möglichkeiten hätte ich mit XPath 1.0?

      Im Grunde muss ich folgendes erreichen:

      Code:
      <sref:service-ref xmlns:sref="http://docs.oasis-open.org/wsbpel/2.0/serviceref">
      <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
      	<Address>http://services.se.uni-hannover.de
      		/HelloWorldServices/services/GermanHelloWorldService</Address>
      </EndpointReference>
      </sref:service-ref>
      Dies soll in eine BPEL-Variable eingefügt werden, wobei der Teil zwischen <Address> dynamisch eingesetzt werden soll.

      Meine Lösung war concat(Teil1, $Address, Teil2). Allerdings scheitert dies an den Anführungseichen. Dank BPEL bin ich auch auf XPath 1.0 beschränkt! -(

      Comment


      • #4
        Was genau scheitert bei concat(Teil1, $Address, Teil2) an den Anführungszeichen? In diesem XPath-Ausdruck sind doch überhaupt keine Anführungszeichen.
        Mit XPath 1.0 kann man nur
        Code:
        concat('"', "'")
        benutzen, also abwechselnd das eine oder andere Zeichen als Begrenzer.

        Comment


        • #5
          Teil1 und Teil2 bezieht sich auf den Ausdruck vorher:

          Code:
          <sref:service-ref xmlns:sref="http://docs.oasis-open.org/wsbpel/2.0/serviceref">
          <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
          	<Address>http://services.se.uni-hannover.de
          		/HelloWorldServices/services/GermanHelloWorldService</Address>
          </EndpointReference>
          </sref:service-ref>
          Wenn ich das ganze jetzt aber mit concat zusammenführe, wie due es beschrieben hast, dann werden die < zu &lt; übersetzt, was jedoch hier nicht der Fall sein soll. Wie kann ich das noch ändern?

          EDIT: Hier mal der Code von Concat:

          Code:
          concat('<sref:service-ref xmlns:sref="http://docs.oasis-open.org/wsbpel/2.0/serviceref"><EndpointReference xmlns="http://www.w3.org/2005/08/addressing"><Address>',concat('http://', $waterGauge/wg:ipAddress, $waterGauge/wg:getTimeSeriesPath) ,'</Address></EndpointReference></sref:service-ref>')

          Comment


          • #6
            Mit XPath kann man keine Knoten wie Elemente erzeugen, nur existierende Knoten selektieren. Du brauchst XSLT oder XQuery, wenn du Knoten erzeugen willst.
            Also etwa
            Code:
            <xsl:template match="foo">
              <sref:service-ref xmlns:sref="http://docs.oasis-open.org/wsbpel/2.0/serviceref">
                <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
                   <Address>
                      <xsl:value-of select="concat('http://', $waterGauge/wg:ipAddress, $waterGauge/wg:getTimeSeriesPath)"/>
                   </Address>
                </EndpointReference>
              </sref:service-ref>
            </xsl:template>

            Comment


            • #7
              Das dumme ist nur, dass ich die Knoten in BPEL nicht selektieren kann. Selbst wenn ich vorher eine BPEL-Variable mit dem Grundgerüst erstelle und dann über XPath die Adresse zuweisen will. Eine Lösung dafür ist dir nicht bekannt oder?

              Comment


              • #8
                BPEL oder wie man damit XPath verwendet, ist mir in der Tat nicht bekannt. Ich verwende XPath in XSLT oder halt per API (mit Methoden wie SelectNodes oder SelectSingleNode im .NET framework).

                Comment

                Working...
                X