Приложение XPath с использованием тика парсера - PullRequest
2 голосов
/ 03 февраля 2012

Я хочу убрать нерегулярный веб-контент - (может быть html, pdf image и т. Д.) В основном html.Я использую тика парсер для этого.Но я не знаю, как применять xpath, как я использую в html cleaner.

Код, который я использую,

BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();
URL u = new URL("/5329862/est-li-sposob-peretaskivaniya-v-drag-and-drop    drop-moment-in-drag-and-drop");
new HtmlParser().parse(u.openStream(),handler, metadata, context);
System.out.println(handler.toString());

Но в этом случае я не получаю вывод.Но для URL google.com я получаю вывод.

В любом случае я не знаю, как применить xpath.

Любые идеи, пожалуйста ...

Попытался сделать свой собственный xpath тем, что использует обработчик содержимого тела,

HttpClient client = new HttpClient();
        GetMethod method = new GetMethod("/5329862/est-li-sposob-peretaskivaniya-v-drag-and-drop");
        int status = client.executeMethod(method);
        HtmlParser parse = new HtmlParser();
        XPathParser parser = new XPathParser("xhtml", "http://www.w3.org/1999/xhtml");          
        //Matcher matcher = parser.parse("/xhtml:html/xhtml:body/descendant:node()");
       Matcher matcher = parser.parse("/html/body//h1");        
ContentHandler textHandler = new MatchingContentHandler(new WriteOutContentHandler(), matcher);
        Metadata metadata = new Metadata(); 
        ParseContext context = new ParseContext();
        parse.parse(method.getResponseBodyAsStream(), textHandler,metadata ,context);   
        System.out.println("content: " + textHandler.toString()); 

Но не получить содержимое в данном xpath ..

1 Ответ

2 голосов
/ 07 февраля 2012

Я бы посоветовал вам взглянуть на исходный код BodyContentHandler , который поставляется с Tika. BodyContentHandler возвращает только xml в теге body, основываясь на xpath

В общем, вам следует использовать MatchingContentHandler , чтобы обернуть выбранный ContentHandler в XPath, что и делает BodyContentHandler для внутреннего использования.

...