XPath - Frage zu Ausdrücken
-
Habe folgende xpath Aufabge und habe meine Probleme... Vieleicht kann mir hier ja jemand helfen.
Aufgabe:
Consider root node as context node
Which XPath location matches?
What are the result?- /address-book
- /address-book/entry/@lang
- address-book/comment()
- entry/name
- address-book/name
- .
- name
- address/*
- /address-book/entry/comment
- */street
- /name/street/text()
- name/address/location/text()
XML-Datei
<address-book> <!-- important addresses --> <entry lang=“en”> <name>Mr. X</name> <comment> Address unknown </comment> </entry> <entry lang=“de”> <name>Mr. Y</name> <address> <street> Musterstrasse. 30 </street> <location> <town>Muenchen</town> <location> </address> </entry> </address-book>Vielen Dank
-
Das ist doch eine einfache Aufgabe. Womit genau hast du ein Problem?
Oder willst du etwa nur, dass man dir einfach die Lösung sagt?
-
Sorry dass ihr das von mir denkt. Klar teilweise komme ich auch gleich drauf. Teilweise bin ich aber der Meinung dass nix rauskommen darf so wie bei entry/name da immer vom root ausgegangen wird. Viele dieser Ausdrücke beginnen ja mit Elementen die weiter "innen" stehen was ja nicht gehen dürfte. Ist das richtig? Es muss ja am Anfang immer / oder ./ bzw address-book stehen. Ist das richtig?
-
Das stimmt so nicht. Denn "." ist der Standardfall, der verwendet wird, wenn nichts anderes angegeben ist. "." steht dabei für den Kontextknoten (self::node()).
Das bedeutet: "entry/name" ist absolut das selbe wie "./entry/name".
-
Das hätte ja nun zur Folge dass die Ausdrücke 5,7,8,11,12 nicht gehen. Da zum Beispiel bei 5 dar Root stimmt jedoch address-book keine element name enthält. Richtig wäre aber address-book/*/name oder geht so was gar nicht
-
Deine Lösung stimmt schon. Die Nummer 5 geht jedoch deshalb nicht, weil das Wurzelelement (address-book) kein Kindelement address-book hat. Denn genau das würde 5 jedoch verlangen. Immer daran denken, du befindest dich "im" Standpunkt eines Kontextknotes - hier das Wurzelelement address-book - und musst die Ausdrücke von diesem ausgehend relativ auswerten. Einzige Ausnahme sind absolute Pfadangaben (alles was mit "/" beginnt).
Das heißt "address-book/name" im Kontext des Wurzelknotens "/address-book" ist gleichbedeutend mit "/address-book/address-book/name"!
-
Ach so das ist schon mal hilfreich

Also ich fasse mal zusammen:
- geht
- geht
- geht nicht da ich mich schon im address-book befinde und kein child address-book vorhanden ist.
- geht
- geht nicht gleich wie 3
- geht gibt alles aus was im knoten drin ist...
- geht nicht da address-book kein child name hat
- geht nicht auch kein child-element address
- geht da von Wurzel aus
- geht wegen *
- geht nicht wurzelelement name gibts nicht
- geht nicht da address-book keinen namen enthaelt
ist das richtig?
Gruss
Gerd
-
ist das so richtig oder liege ich da falsch? kann mir das jemand bestätigen?
Vielen Dank
Gerd
-
Alles richtig bis auf 10, das geht ebenfalls nicht. Denn * steht für ein beliebiges Tag - aber nur eines. Damit es funktioniert müsste es "*/address/street" heißen.
-
Danke dir!!

Bei 10 würde aber genau so //entry//street gehen bzw. //street oder auch
///*/street... Wenn du jetzt ja sagst dann habe ich es glaub verstanden
Sorry dass es am Anfang so rüber kam als wollte ich nur die Lösung...
-
dsl junkie schrieb:
Wenn du jetzt ja sagst dann habe ich es glaub verstanden

Ja
