ERLEDIGT
NEIN
NEIN
ANTWORTEN
20
20
ZUGRIFFE
3595
3595
EMPFEHLEN
-
Hallo,
bräuchte einen etwas komplizierteren XPath Ausdruck. Habs leider nicht selbst lösen können:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
<?xml version="1.0" encoding="iso-8859"?> <rss version="0.91"> <channel> <channelTitle>SPIEGEL ONLINE</channelTitle> <description>Schneller wissen, was wichtig ist</description> <language>de</language> <item> <title>Kriegsverbrechertribunal Den Haag</title> <link>http://www.spiegel.de/politik/ausland/0,1519.html</link> </item> <item> <title>Wir sind krank durch Konsolen: Nintendo gegen Wii</title> <link>http://www.spiegel.de/netzwelt/web/0,1520.html</link> </item> <item significant="true"> <title>Einzelhandel: Ladendiebe stehlen sechs Millionen Euro</title> <link>http://www.spiegel.de/wirtschaft/0,1521.html</link> </item> <item> <title>Piloten-Ansage: "Keine Sorge - wir fallen"</title> <link>http://www.spiegel.de/reise/aktuell/0,1522.html</link> </item> <item> <title>Palaestinenserkaempfe: Hamas greift durch</title> <link>http://www.spiegel.de/politik/ausland/0,1523.html</link> </item> <item significant="true"> <title>Markenrechtsstreit: Budweiser erleidet Niederlage</title> <link>http://www.spiegel.de/wirtschaft/0,1524.html</link> </item> <item> <title>Machtuebergabe in Bayern: Beckstein an Stoiber ab</title> <link>http://www.spiegel.de/politik/deutschland/0,1525.html</link> </item> </channel> </rss>
Die Aufgabenstellung heißt:
Geben Sie alle title-Knoten aus, die das Wort "wir" enthalten und zusätzlich alle link-Knoten, die aus dem Ressort "politik" stammen.
Mein Ansatz bislang ist dieser, er tut aber nicht was ich möchte:
Code :1
/rss/channel/item/*[(contains(text(),"politik") & node-name()="link") | (contains(text(),"wir") & node-name()="title")]
http://www.futurelab.ch/xmlkurs/xpath.de.html
Hab hier vergeblich alles mögliche ausprobiert. Vielleicht hätte hier jemand einen Tip für mich.
Vg Erdal
-
15.11.07 07:50 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.Du verwendest die falschen Operatoren. Der | Operator vereinigt 2 Knotenmengen, den & Operator gibt es gar nicht. Du solltest die boolschen Operatoren and und or verwenden. Siehe z.B. http://www.w3schools.com/xpath/xpath_operators.asp
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo deepthroat,
ja mit dem Operator or komme ich ein Stückchen weiter. Jetzt nimmt er beide. Wie kann ich aber einschränken, das er einen Filter nur das Tag link, und den anderen Filter für das Tag title mit einbeziehen soll?
Vg Erdal
-
15.11.07 15:53 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Das Problem hierbei ist, das die Funktion node-name(...) einen Parameter erwartet, weiss aber nicht wass ich reinschreiben könnte. Habs mit * oder //* ähnlich versucht ..., ohne Erfolg .
-
15.11.07 16:36 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
/rss/channel/item/*[contains(text(),"politik") and name()="link" or contains(text(),"wir") and name()="title"]
Ja nun damit ist die Aufgabenstellung fast gelöst. Ich hatte name() garnicht gesehen, da es in der Liste ganz weit unten gesondert war.
Das letzte was noch fehlt ist, eine case-insensitive Suche. D.h. es sollten auch Vorkommnisse wie "Wir" akzeptiert werden. Ein schachteln mit lower-case() führt aber zu einem Fehler:
contains(lower-case(text()),"wir")
-
15.11.07 17:52 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Vielen Dank für die Unterstützung!
Kennst du vielleicht einen anderen Online Interpreter der auch XPath 2.0 kann? Hab ein Paar ausprobiert, keiner wollte lower-case() akzeptieren.
Oder vielleicht ein Eclipse Plugin das ohne großen Aufwand XPath Ausdrücke auswerten kann?
Vg Erdal
-
Ja damit hat es nun endlich geklappt!

Code :1
/rss/channel/item/*[contains(text(),"politik") and name()="link" or contains(translate(text(), "WIR", "wir"),"wir") and name()="title"]
-
15.11.07 19:07 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Du könntest den XPath Explorer (http://sourceforge.net/projects/xpe) verwenden.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo alle Tutorials users,
ich habe bitte ein frage zum Thema XPath mit Java benutzen:
ich habe mein String so definiert um den ganz xml "rss" nach "wir" zu suchen.
ich kriege aber nur einem einzigen Output, und das war die erste knote wo er "wir" findet. dann hört mein Programme nach weiteren "wir" zu suchen.
String expression = ("rss/channel/item/*[ contains(translate(text(), \"WIR\", \"wir\"),\"wir\") ]");
ich denke irgendwas habe ich in meinem String Definition falsch geschrieben.
oder?
Danke
-
mein code ist:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import java.io.IOException; import javax.xml.parsers.*; import javax.xml.soap.Node; import javax.xml.xpath.*; import org.w3c.dom.Document; import org.xml.sax.SAXException; /** * @author Darimont * * TODO Comment me */ import javax.xml.xpath.XPath; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.xml.sax.InputSource; public class XPathExample { /** * Creates a new instance of xpath */ public static void main(String[] args) { String expression = ("rss/channel/item/*[ contains(translate(text(), \"WIR\", \"wir\"),\"wir\") ]"); InputSource iSource = null; try { iSource = new InputSource("test.xml"); } catch(Exception e) { e.printStackTrace(System.out); } XPath xpath = XPathFactory.newInstance().newXPath(); try { String output = xpath.evaluate(expression, iSource); System.out.println("output: " + output); } catch(XPathExpressionException e) { e.printStackTrace(System.out); } catch(Exception e) { System.out.println(e.toString()); } } }
die Output ist nur:
Code :1
output: Wir sind krank durch Konsolen: Nintendo gegen Wii
danke
-
kann mir bitte keiner helfen
ist das so schwer
-
20.11.07 09:26 #15
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.Nein. Aber wenn du den XPath einmal anwendest, und einen String zurückbekommst - wie soll das funktionieren, dass du mehrere Resultate erhälst?
Versuch's mal so:GrußCode java:1 2 3 4 5 6
import org.w3c.dom.NodeList; NodeList nl = (NodeList) xpath.evaluate(expression, iSource, XPathConstants.NODESET); for (int i = 0; i < nl.getLength(); ++i) { System.out.println(nl.item(i).getFirstChild().getNodeValue()); }
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Xpath falsch?
Von suntrop im Forum XML TechnologienAntworten: 8Letzter Beitrag: 04.08.10, 12:23 -
Xml Jdom Xpath
Von delta79 im Forum JavaAntworten: 0Letzter Beitrag: 17.11.08, 15:26 -
XPATH & XSL-Transformation
Von JerseyGirl im Forum XML TechnologienAntworten: 0Letzter Beitrag: 09.09.08, 13:12 -
Java XPath Problem (1.5 javax.xml.xpath.*)
Von mad_dark_angel im Forum JavaAntworten: 5Letzter Beitrag: 10.05.06, 14:39 -
xpath joins: wie?
Von nautiLus` im Forum XML TechnologienAntworten: 2Letzter Beitrag: 05.12.05, 21:45





Zitieren

Login





