有人可以建议我使用Java库来允许我在html页面上执行XPath查询吗?
我尝试使用JAXP,但它一直给我一个奇怪的错误,我似乎无法修复(线程“主”java.io.IOException:服务器返回HTTP响应代码:503为URL:http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)。< / p>
非常感谢你。
修改
我发现了这个:
// Create a new SAX Parser factory
SAXParserFactory factory = SAXParserFactory.newInstance();
// Turn on validation
factory.setValidating(true);
// Create a validating SAX parser instance
SAXParser parser = factory.newSAXParser();
// Create a new DOM Document Builder factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// Turn on validation
factory.setValidating(true);
// Create a validating DOM parser
DocumentBuilder builder = factory.newDocumentBuilder();
来自http://www.ibm.com/developerworks/xml/library/x-jaxpval.html但是将argumrent变为false并没有改变任何东西。
答案 0 :(得分:1)
将解析器设置为“非验证”只会关闭验证;它不禁止获取DTD。获取DTD不仅需要验证,还需要实体扩展......据我所知。
如果要禁止提取DTD,则需要向EntityResolver
或DocumentBuilderFactory
注册正确的DocumentBuilder
。实现EntityResolver
的{{1}}方法以始终返回空字符串。
答案 1 :(得分:0)
看看这个:
http://www.w3.org/2005/06/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic
可能您已将解析器设置为执行DOM验证,并且它正在尝试检索DTD。 JAXP应该有一种方法来禁用DTD验证,并且只针对假定有效的文档运行XPATH。我没有使用过多年的JAXP,所以很抱歉我无法提供帮助。