X-path-Abfragen < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:58 Di 05.06.2012 | Autor: | melodie |
ich brauche xpath-abfragen, um Teile aus beliebigen xml Dokumenten zu adressieren.
1. alle Elemente namens 'book', unabh. von der Position = ../book/..
2. alle Elemente 'id', deren Elternelement 'parent' ist, wobei das element parent irgendwo unterhalb des elements 'catalog' ist = catalog//parent/@id
3. Anzahl der Attributen 'name', die Kindelemente von 'title' sind = count(title/@name)
4. textinhalte von Elementen 'text' (ohne Duplikate) =
5. alle Elemente die genau 2 Attribute besitzen =
6. Fünftes element vom typ 'category', welches direktes Kind von Element 'catalog' ist = catalog/category[5]
7. alle Elemente, die ein Atribut namens 'number' besitzen, das mit gleichem wert ebenfalls im Elternelement ist =
Meine Lösungen habe dazugeschrieben. Kann die mir bitte jmd. bestätigen und Tipps für den Rest geben?
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:http://www.java-forum.org/xml-co/137265-xpath-query.html
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:46 Di 05.06.2012 | Autor: | rainerS |
Hallo!
> ich brauche xpath-abfragen, um Teile aus beliebigen xml
> Dokumenten zu adressieren.
>
> 1. alle Elemente namens 'book', unabh. von der Position =
> ../book/..
Nein. .. bezieht sich immer auf den "current node" und wählt das parent-Element aus.
../book/..
wäre also immer: parent des aktuellen Elements, davon die Kinder namens book, davon das parent-Element. Mit anderen Worten: wenn es ein book-Element auf gleicher Hierarchie-Ebene gibt, dann ist ../book/.. das gleiche wie .., ansonsten ist das Ergebnis leer.
Korrekte Anwort: //book
>
> 2. alle Elemente 'id', deren Elternelement 'parent' ist,
> wobei das element parent irgendwo unterhalb des elements
> 'catalog' ist = catalog//parent/@id
Fast: @ wählt ein Attribut aus, kein Element
Korrekt: catalog//parent/id
> 3. Anzahl der Attributen 'name', die Kindelemente von
> 'title' sind = count(title/@name)
> 4. textinhalte von Elementen 'text' (ohne Duplikate) =
Textinhalt: text/text()
In Xpath 2.0 gibt es die Funktion distinct-values
In XPath 1.0 könntest du mit preceding-siblings:*/text() vergleichn
> 5. alle Elemente die genau 2 Attribute besitzen =
Tipps:
Alle Elemente: //*
Prädikat zum Zählen von Attributen: count(@*)
>
> 6. Fünftes element vom typ 'category', welches direktes
> Kind von Element 'catalog' ist = catalog/category[5]
>
> 7. alle Elemente, die ein Atribut namens 'number' besitzen,
> das mit gleichem wert ebenfalls im Elternelement ist =
Tipps:
alle Elemente, die ein Attribut namens 'number' besitzen: *[@number]
Wert des number-Attributes im Parent: ../@number
Zusammen: *[@number = ../@number]
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 00:05 Mi 06.06.2012 | Autor: | melodie |
ich habe mich bei Nr 2 vertippt sorry. es sollte eig. alle Attribute ausgewählt werden.. wäre dann catalog//parent/@id doch richtig?
und zu 5. habe ich count(//@2) ist das so auch richtig?
Vielen Dank!
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:35 Mi 06.06.2012 | Autor: | rainerS |
Hallo!
> ich habe mich bei Nr 2 vertippt sorry. es sollte eig. alle
> Attribute ausgewählt werden.. wäre dann
> catalog//parent/@id doch richtig?
Ja.
> und zu 5. habe ich count(//@2) ist das so auch richtig?
Nein, das wäre die Anzahl aller Attribute mit Namen 2 (wenn es so was geben würde; "2" ist kein gültiger Name).
Wie ich schon schrieb, ist die Anzahl aller Attribute count(@*), aber du willst ja nicht die Anzahl herausbekommen, sondern diejenigen Elemente, die eine bestimmte Anzahl von Attributen haben. Also, fang mit //* an, um alle Elemente zu bekommen, und formuliere die Bedingung richtig.
Viele Grüße
Rainer
|
|
|
|