Error occured in Xpath

随声附和 提交于 2021-02-05 09:06:08

问题


I want to store comment section of this web page :-

http://timesofindia.indiatimes.com/india/Officer-who-tracked-major-scams-back-in-Enforcement-Directorate/articleshow/27933692.cms

this is my java code :-

import java.io.*;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class UrlReadPageDemo1 {

    public static void main(String[] args) throws XPathExpressionException, IOException {
        System.out.println("helllo\n\n\n");
        Document doc = Jsoup.connect("http://timesofindia.indiatimes.com/india/Officer-who-tracked-major-scams-back-in-Enforcement-Directorate/articleshow/27933692.cms").get();
        String exp = "//div[@class='master_container']/[@id='netspidersosh']/div[@class='navlft']/div[@class='padlftrgt']/div[@class='clearFix']/div[@class='flL left_bdr']/[@id='populatecomment']/[@id='cmtMainBox']/div/[@id='cmtBox']/div/[@id='box']/[@id='cmt']/div/span";

        System.out.println(exp);

        XPathFactory factory = XPathFactory.newInstance();
        XPath xPath = factory.newXPath();
        NodeList fav = (NodeList) xPath.evaluate(exp,doc.getAllElements(), XPathConstants.NODESET);

        Element Comment = (Element) fav.item(17);
        String str = Comment.getTextContent();
        System.out.println(str);
    }
}

Error occurred :-

Exception in thread "main" javax.xml.transform.TransformerException: A location step was expected following the '/' or '//' token.
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.error(XPathParser.java:612)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.RelativeLocationPath(XPathParser.java:1641)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.LocationPath(XPathParser.java:1599)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.PathExpr(XPathParser.java:1319)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.UnionExpr(XPathParser.java:1238)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.UnaryExpr(XPathParser.java:1144)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.MultiplicativeExpr(XPathParser.java:1065)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.AdditiveExpr(XPathParser.java:1007)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.RelationalExpr(XPathParser.java:932)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.EqualityExpr(XPathParser.java:872)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.AndExpr(XPathParser.java:836)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.OrExpr(XPathParser.java:809)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.Expr(XPathParser.java:792)
    at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:131)
    at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:180)
    at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:268)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:188)
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:270)
    at UrlReadPageDemo1.main(UrlReadPageDemo1.java:29)

--------------- linked to ------------------

javax.xml.xpath.XPathExpressionException
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:284)
    at UrlReadPageDemo1.main(UrlReadPageDemo1.java:29)

so please help me solve this code...


回答1:


The error says:

A location step was expected following the '/' or '//' token.

The problem is that after slash, the brackets are not enough. An element or @attribute, potentially prefixed with some_axis:: is expected. The predicate in brackets further filters the set of matched nodes. To match any element, use *, like

//div[@class='master_container']/*[@id='netspidersosh']

By the way, why so long XPath? In HTML, the id value should be unique, so potentially this expression might suffice:

//*[@id='cmt']/div/span

Update:

An introductory-level tutorial to XPath can be found at: http://zvon.org/xxl/XPathTutorial/Output/example1.html



来源:https://stackoverflow.com/questions/20783331/error-occured-in-xpath

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!