use*_*121 3 java xpath dom sax
我编写了下面的代码,通过指定和值来检索v元素中attribuet tag的值,如下所示.我认为我的错误与我在xpath表达式中使用&&运算符的方式有关,因为我使用的时候latlon
String expr0 = "//node[@lat='53.334062']/following-sibling::tag[1]/@v";
Run Code Online (Sandbox Code Playgroud)
我收到了预期的值,但是当我使用下面发布的表达式时,系统崩溃了
但在运行时,程序崩溃并显示以下错误消息.
代码:
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);
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
错误:
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)
Run Code Online (Sandbox Code Playgroud)
Ian*_*rts 12
XPath中的布尔"和"运算符是单词and,而不是&&(规范)
String expr0 = "//node[@lat='53.334062' and @lon='8.841545']/following-sibling::tag[1]/@v";
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用两个谓词:
String expr0 = "//node[@lat='53.334062'][@lon='8.841545']/following-sibling::tag[1]/@v";
Run Code Online (Sandbox Code Playgroud)
这具有相同的效果 - 谓词从左到右应用,因此第一个谓词将所有node元素的集合过滤为仅具有的那些元素@lat='53.334062',第二个过滤器将其设置为仅具有的元素@lon='8.841545'.
| 归档时间: |
|
| 查看次数: |
9489 次 |
| 最近记录: |