2013-12-26 2 views
1

Я хочу сохранить комментарий раздел этой веб-странице: -произошла ошибка в Xpath

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

это мой Java-код: - произошло

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); 
    } 
} 

Ошибка: -

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) 

--------------- связанный с ------------------

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

так, пожалуйста, помогите мне решить этот код ...

ответ

2

Ошибка говорит:

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

Проблема заключается в том, что после косой черты, то скобки не достаточно. Ожидается element или @attribute, потенциально с префиксом some_axis::. Предикат в скобках дополнительно фильтрует набор согласованных узлов. Для того, чтобы соответствовать любому элементу, используйте *, как

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

Кстати, почему так долго XPath? В HTML, значение идентификатор должен быть уникальным, поэтому потенциально это выражение может быть достаточно:

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

Update:

учебник вводного уровня по XPath можно найти по адресу: http://zvon.org/xxl/XPathTutorial/Output/example1.html

+0

б Xpath // * [@ id = 'cmt']/div/span Произошла ошибка: - javax.xml.transform.TransformerException: невозможно оценить выражение с использованием этого контекста \t at com.sun.org.apache.xpath.internal.XPath.execute (XPath.java:367) \t по адресу com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval (XPathIm pl.java:208) \t at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate (XPathImpl.java:270) \t at UrlReadPageDemo1.main (UrlReadPageDemo1.java:31) – user3122429

Смежные вопросы