【发布时间】:2014-09-07 12:19:07
【问题描述】:
请注意:虽然这个问题直接涉及一个名为 JSoup 的 Java HTML 解析库,但我真的相信这是一个 XPath 问题(并且通过解决方案)。
我们有一个提供 HTML 页面的内部网络应用程序,fizz.html。在这个页面上,有一个重要的 ID 号,另一个进程需要能够在它运行的任何时候获取它。此 ID 会定期/可预测地更改;因此,有一天,HTML 页面中的 ID 可能是“394959”。改天可能是“248483”等。由于此问题上下文之外的原因,此 HTML 页面是获取 ID 的唯一方法。
所以我想使用 JSoup 来访问 HTML 页面的 URL,并使用 Xpath 选择器解析 ID。
HTML 页面(jsFiddle):
这里有问题的 ID 可以在 jsFiddle 的第 238 行找到:
<a href="/chain/admin/config/editRepository.action?planKey=AB-CSD&repositoryId=28049450">
它是repositoryId,在这种情况下它当前是“28049450”。
我的 JSoup 代码:
Document doc = Jsoup.connect("http://myapp.example.com/fizz.html").get() // See the jsFiddle above
Elements repoIdElems = doc.select("//*[@id=\"panel-editor-list\"]/ul")
当我运行它时,我得到:
Exception in thread "main" org.jsoup.select.Selector$SelectorParseException: Could not parse query '//*[@id="panel-editor-list"]/ul': unexpected token at '//*[@id="panel-editor-list"]/ul'
at org.jsoup.select.QueryParser.findElements(QueryParser.java:196)
at org.jsoup.select.QueryParser.parse(QueryParser.java:53)
at org.jsoup.select.QueryParser.parse(QueryParser.java:39)
at org.jsoup.select.Selector.<init>(Selector.java:80)
at org.jsoup.select.Selector.select(Selector.java:93)
at org.jsoup.nodes.Element.select(Element.java:252)
at org.jsoup.nodes.Element$select.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at com.me.myorg.parser.ClientParser.executeIntegration(ClientParser.groovy:98)
at com.me.myorg.parser.ClientParser$executeIntegration.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at com.me.myorg.parser.ClientParser.main(ClientParser.groovy:143)
所以我问:这是一个糟糕的 XPath(很可能),还是我使用 JSoup API 的方式有问题?
【问题讨论】:
标签: java xpath syntax html-parsing jsoup