Wie verwenden von logischen operator in den xpath-Ausdruck
schrieb ich die beloww-code ermittelt werden, den Wert der attribuet v
im element tag
durch specifyin die lat
und lon
Werte, wie unten gezeigt.
ich denke, mein Fehler ist im Zusammenhang mit der Verwendung des && - operator in den xpath-Ausdruck, denn wenn ich
String expr0 = "//node[@lat='53.334062']/following-sibling::tag[1]/@v";
erhalte ich den erwarteten Wert, aber wenn ich uesd die unten gepostet Ausdruck, die system-crashs
aber zur Laufzeit das Programm crashs und zeigt die folgenden Fehlermeldung.
code:
String expr0 = "//node[@lat='53.334062' && @lon='8.841545']/following-sibling::tag[1]/@v";
xPath.compile(expr0);
String s = (String) xPath.evaluate(expr0, document, XPathConstants.STRING);
System.out.println(s);
xml:
<?xml version='1.0' encoding='utf-8' ?>
<osm>
<node id="25779111" lat="53.0334062" lon="8.8461545"/>
<node id="25779112" lat="53.0338904" lon="8.846314"/>
<node id="25779119" lat="53.0337395" lon="8.8489255"/>
<tag k="maxspeed" v="30"/>
<tag k="maxspeed:zone" v="yes"/>
<node id="25779114" lat="53.334062" lon="8.841545"/>
<node id="25779117" lat="53.038904" lon="8.84614"/>
<node id="25779110" lat="53.033795" lon="8.489255"/>
<tag k="maxspeed" v="32"/>
<tag k="maxspeed:zone" v="yes"/>
</osm>
Fehler:
Exception in thread "main" javax.xml.transform.TransformerException: Zusätzliche ungültige Tokens: '&&', '[', '@', 'lon', '=', ''8.841545'', ']', '/', 'following-sibling', '::', 'tag', '[', '1', ']', '/', '@', 'v'
at com.sun.org.apache.xpath.internal.compiler.XPathParser.error(Unknown Source)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(Unknown Source)
at com.sun.org.apache.xpath.internal.XPath.<init>(Unknown Source)
at com.sun.org.apache.xpath.internal.XPath.<init>(Unknown Source)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(Unknown Source)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den booleschen "und" - operator in den XPath ist das Wort
and
, nicht&&
(Spezifikation)Alternativ können Sie die beiden Prädikate:
Dies hat den gleichen Effekt - Prädikate gelten von Links nach rechts, so dass das erste Prädikat filtert die Menge aller
node
Elemente, um nur diejenigen, die@lat='53.334062'
, der zweite Filter , dass Satz nur auf diejenigen, die@lon='8.841545'
.