2012-12-14 5 views
0

Java에서 http://www.amazon.com/gp/bestsellers/electronics에서 org.w3c.dom.NodeList을 추출하려고합니다.Java 및 XPath로 웹 페이지 컨텐츠 추출

$x("//div[@class='zg_itemRightDiv_normal']")

위의 문은 완벽했다,하지만 난 자바의 javax.xml.xpathorg.w3c.dom 라이브러리를 사용할 때, 나는 어떤 결과를 얻을 수 없습니다 : 여기 내가 구글 크롬 자바 스크립트 콘솔에서 후있어 결과를 표시하는 데 사용 된 XPath 문이다 :

XPathExpression expr = xPath.compile("//div[@class='zg_itemRightDiv_normal']"); 
NodeList productNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

// In the above productNodes definition, doc is a org.w3c.dom.DocumentFragment 

System.out.println(productNodes.getLength()); // prints out '0' 

나는 무엇을 놓치고?

+0

전체 경로 제공 시도 .... – mtk

답변

0

이 문제의 해결책은 두 가지 었죠 :

  1. 내가 추출하기 위해 시도 된 정보를 포함하지 않았다 읽는 된 DocumentFragment을; Document 전체를 사용하여 문제가 해결되었습니다.
  2. 내 XPath 문에서 HTML 태그를 대문자로 사용하면 이전 정보 (예 : xPath.compile("//DIV[@class='zg_itemRightDiv_normal']"))를 얻을 수있었습니다.
1

입력을 실제로 HTML (XHTML 아님) 인 XML로 처리하려고했을 수 있습니다.

먼저 HTML을 XHTML로 변환해야합니다. 이전에는 성공적으로 TagSoup을 사용했지만이를 수행 할 수있는 다른 라이브러리 (JTidy, NekoHTML)도 있습니다.

TagSoup는 SAX 파서를 제공합니다. 그러면 SAX 파서가 DOM으로 변환 된 다음 XPath로 처리 할 수 ​​있습니다.

+0

TagSoup은 매우 도움이되었습니다. 감사합니다. –