糟糕的XPath或糟糕的JSoup?

时间:2014-07-16 20:13:29

标签: java xpath syntax html-parsing jsoup

请注意:虽然这个问题直接涉及一个名为JSoup的Java HTML解析库,但我真的相信它是一个XPath问题(并通过解决方案)。

我们有一个内部网络应用程序,用于提供HTML页面fizz.html。在此页面上有一个重要的ID号,另一个进程在运行时需要能够获取。该ID定期/可预测地改变;因此,有一天,HTML页面中的ID可能是" 394959"。另一天它可能是" 248483"等。出于此问题的上下文之外的原因,此HTML页面是获取ID的唯一方式

所以我想使用JSoup来点击HTML页面的URL并使用Xpath选择器解析ID。

HTML页面(jsFiddle):

  

http://jsfiddle.net/B5zvV/

这里提到的ID可以在jsFiddle的第238行找到:

<a href="/chain/admin/config/editRepository.action?planKey=AB-CSD&amp;repositoryId=28049450">

它是repositoryId,在这种情况下,它目前是&#34; 28049450&#34;。

我的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的方式不好?

1 个答案:

答案 0 :(得分:1)

Jousp不支持xpath。 select语句仅使用CSS选择器。