我要在一个网站的特定位置解析网址。为此我用Java编写了一个简单的程序。但是这个程序返回空指针异常。似乎getNameItem("href")
返回null。我怀疑使用getNameItem提取内部网址的错误方法" href"标签
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = b.parse(new FileInputStream("clean.html"));
//Evaluate XPath against Document itself
javax.xml.xpath.XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList)xPath.evaluate(".//*[@class='r_news_box']",
doc.getDocumentElement(), XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) {
Element e = (Element) nodes.item(i);
System.out.println(e.getAttributes().getNamedItem("href").getTextContent());
}
P.S:这是应该由此xpath选择的节点之一:
<div class="r_news_box">
<a class="picLink" target="_blank" href="/fa/news/427583/test">
<img class="r_news_img" width="50" height="65" src="/files/fa/news/1393/5/29/411217_553.jpg" alt="test"/>
</a>
答案 0 :(得分:1)
可能是因为并非所有选定的节点都具有href
属性。您可能希望更改XPath以确保仅返回具有href
属性的元素:
.//*[@class='r_news_box' and @href]
更新:
根据您的更新,href
是<a>
属性等于class
的元素中的r_news_box
节点的属性,因此这里更正了XPath:
.//*[@class='r_news_box']/a[@href]
答案 1 :(得分:0)