我想从此网站提取内容:https://it.projektwerk.com/de/projects/javax.xml.xpath的XPath表达式不起作用
例如,我有一个XPath表达式:.//*[@id='content_0']/H3/A
(请注意,大写字母是正确的,因为我的文档解析器 - > org.cyberneko.html ...解析标签的大写的人)
这是一个有效的XPath表达式;例如,我可以使用FirePath获取内容。但是,使用javax.xml.xpath
类,检索是不可能的。我做这样的:
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile(exprString);
Node node = expr.evaluate(doc, XPathConstants.NODE);
但node
总是null
。
我不明白这一点,因为还有其他网站使用相同的语法,其中正在工作(例如.//*[@id='p_p_id']/DIV/DIV/DIV/DIV[3]/A/H3/SPAN
)
希望有人能帮助的其他表现。
通常,HTML元素位于HTML命名空间中 - 也就是其URI为“http:// www.w3.org/1999/xhtml”的命名空间。您需要调用[xpath.setNamespaceContext](http://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPath.html#setNamespaceContext-javax.xml.namespace.NamespaceContext- )使XPath引擎知道该名称空间,然后将您的表达式更改为像'.//*[@ id ='content_0']/html:H3/html:A'。 – VGR
感谢VGR,帮助我找到解决方案,请参阅下面的答案以获取详细信息。 – eSKape