Announcement

Collapse
No announcement yet.

Xpath Problem mit Saxon8

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

  • Xpath Problem mit Saxon8

    Hi,
    in meiner XSL habe ich einen XPath Aufruf für den mir Saxon kein Ergebnis liefert.
    Code:
    <xsl:value-of select="dita/*[./title/text() = 'Einleitung']/shortdesc/text()"/>
    Erklärung:
    In meiner XML habe ich unter dem Root 'dita' zahlreiche verschiedene Elemente. Aus dieser Sammlung möchte ich eines herausfiltern, das einen eindeutigen Titel enthält. Aus dem herausgefilterten Element möchte ich ein Unterelement namens 'shortdesc' auslesen.

    mit dem VS XPath Tester klappt der Aufruf und ich erhalte das gewünschte Ergebnis, aber Saxon8 scheint nichts zu finden. Eine Fehlermeldung bekomme ich nicht, Das Ergebnis ist einfach leer.

    Ich hab es schon hin und her gebaut (mit und ohne text(); //* und dita/*;...) Alles ohne Erfolg.
    Ich kann hier einfach kein Problem erkennen. Der Aufruf ist doch ansich trivial und sollte klappen!? Mir fällt auch kein alternativer Weg ein.

    Hat jemand eine Idee?

    graz
    Sascha

  • #2
    Ergänzung

    Wie würdet ihr aus folgendem XML die von mir geschilderten Infos herausziehen, wenn ihr euch während des XPath-Aufrufs an einer nicht festgelegten Position im Dokument-Baum befindet?
    Code:
    <dita>
    <concept>
    <title>Fazit</title>
    <...>
    </concept>
    
    <task>
    <title>Enleitung</title>
    <shortdesc>jkdfjdhfjdh</shortdesc>
    <...>
    </task>
    
    <concept>
    <title>Kapitel</title>
    <...>
    </concept>
    <...>
    </dita>

    Comment


    • #3
      //dita/*[string(./title/text()) = 'Einleitung']/shortdesc/text()

      Klappt das?
      Martin Szugat
      www.aboutxml.de

      Comment


      • #4
        Danke,
        das war die Lösung, mit string() funktioniert es!

        Jetzt sollte man das aber auch verstehen:

        An anderen Stellen in meinem Stylesheet habe ich Zeichenketten direkt mit Inhalten von Attributknoten verglichen. Das funktioniert ohne String().
        In diesem Fallmöchte ich den Textknoten eines Elements mit einem String vergleichen. Dazu muss ich den Textknoten zunächst in einen String umwandeln! Demnach sind Attributwerte immer Strings und Textknoten müssen erst in solche umgewandelt werden, sehe ich das richtig?

        Schon mal vielen Dank für die schnelle Hilfe

        Comment


        • #5
          Aus XPath-Spezifikation:
          The = operator tests whether two nodes have the same value, not whether they are the same node. Thus attributes of two different elements may compare as equal using =, even though they are not the same node.
          Mit anderen Worten: Bei dem Vergleich eines Attributs mit einer Zeichenfolge findet ein Vergleich der Werte statt, ansonsten, also auch im Falle von Textknoten, werden Knoten miteinander verglichen.
          Martin Szugat
          www.aboutxml.de

          Comment

          Working...
          X