Announcement

Collapse
No announcement yet.

/descendant:: = // ?

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

  • /descendant:: = // ?

    hi,

    in xslt wird ja sehr häufig die Abkürzung // verwendet, womit man dann leicht zb alle Elemente vom Typ "Knoten" im xml Dokument finden kann, egal wo diese stehen. (//Knoten)
    in XPATH soll dieser Ausruck ja /descendant-or-self::knoten bedeuten.
    In XSLT wohl /descendant::Knoten.

    Sollte dann also //Knoten=/descendant::Knoten genau das gleiche sein in XSLT?
    Ich habe das mal bei einem Ausdruck getestet und da war es nicht das gleiche?
    Habe ich da einen Denkfehler?

  • #2
    "//" alleine ist kein gültiger Ausdruck. "//foo" ist eine Kurzform für "/descendant-or-self::node()/foo" was wiederum eine Kurzform von "/descendant-or-self::node()/child::foo" ist. Und das gilt in XPath wie in XSLT (da XSLT ja einfach XPath-Ausdrücke benutzt).

    Comment


    • #3
      Originally posted by Martin Honnen View Post
      "//" alleine ist kein gültiger Ausdruck. "//foo" ist eine Kurzform für "/descendant-or-self::node()/foo" was wiederum eine Kurzform von "/descendant-or-self::node()/child::foo" ist. Und das gilt in XPath wie in XSLT (da XSLT ja einfach XPath-Ausdrücke benutzt).
      danke für die Antwort.

      in meinem Vorlesungsskript:
      http://pi.informatik.uni-siegen.de/k...0070523_a5.pdf
      findet man auf Seite 7, dass es da wohl Unterschiede gibt von XPATH und XSLT.
      Bin deswegen auch etwas verwirrt, habe ich Internet bisher noch nichts dazu gefunden.
      Immer nur, dass XSLT ja XPATH nutzt... !

      Aber warum dann in einer XSL Transformtion die Abkürzung // nicht einfach durch /descendant-or-self/ ersetzt werden kann, verstehe ich nicht. Aber das Ergebnis ist ein anderes.

      Comment


      • #4
        Wenn man in XSLT Pfadausdrücke in Attributen wie dem "select"-Attribut von Elementen wie for-each, value-of, apply-templates usw. benutzt, dann sind das einfach nur XPath-Ausdrücke, deren Syntax und Semantik durch die XPath-Spezifikation festgelegt ist und in XSLT nicht verändert wird.

        Nur bei den Werten des "match"-Attributes von xsl: template (und einigen anderen Attributen wie "use" von xsl: key) handelt es sich nicht einfach um beliebige Pfadausdrücke, sondern um sogenannte "pattern", deren Syntax und Semantik in XSLT gesondert geregelt ist: http://www.w3.org/TR/xslt#patterns

        Comment


        • #5
          Oh mann, vielen Dank für die Antwort. Das war mir vorher gar nicht klar. Das macht es ja noch komplizierter. Warum kann man denn nicht einfach eine einhelitliche Syntax nehmen?
          Evtl erklärt dass ja meinen Fehler.
          Sehr guter Hinweis

          Comment


          • #6
            gibt es zwischen den expressions und den Patterns denn "tückische" Unterschiede, auf die man auf jeden Fall achten sollte? mir ist bisher noch nichts aufgefallen?

            Comment


            • #7
              Wenn man in einzelnen "Schritten" eines Patterns nur die "child" oder die "attribute"-Axe verwenden kann, ist das sicherlich kein "tückischer" Unterschied, aber sicherlich ein wichtiger: "A location path pattern is a location path whose steps all use only the child or attribute axes."

              In Prädikaten (also in eckigen Klammern []) hat man allerdings auch in Pattern Zugriff auf andere Axen wie preceding, preceding-sibling, following, following-sibling usw.: "Predicates in a pattern can use arbitrary expressions just like predicates in a location path".

              Comment


              • #8
                also kann ich als Pattern nur child, attribut und descendant nehmen zu navigieren. Andere Navigationsrichtungen (parent,ancestor,following-sibling,preceding-sibling,following,preceding,namespace, self, descendant-or-self und ancestor-or-self) sind dann nur in den Expressions möglich. Als Alternative, könnte man dieses dann als Prädikat zum navigieren nehmen?

                Comment

                Working...
                X