我正在从URL读取一些RSS并遇到一些麻烦。 最初我有一个简单的实现:
SAXReader reader = new SAXReader();
Document doc = reader.read(new URL(sURL));
但是,如果响应非常慢,这不允许我超时请求。所以我把它改成了:
public static org.dom4j.Document readXml(InputStream is) throws SAXException, IOException,
ParserConfigurationException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
dbf.setIgnoringComments(false);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setNamespaceAware(true);
DocumentBuilder db = null;
db = dbf.newDocumentBuilder();
return (org.dom4j.Document)db.parse(is);
}
SAXReader reader = new SAXReader();
URL myUrl = new URL(sURL);
URLConnection c = myUrl.openConnection();
c.setConnectTimeout(10000);
c.setReadTimeout(10000);
org.dom4j.Document doc = readXml(c.getInputStream());
Element root = doc.getRootElement();
尝试此操作时,我收到了一个错误的错误:
org.apache.xerces.dom.DeferredDocumentImpl incompatible with org.dom4j.Document
我该如何避免这种情况?上述方法都不应该返回那种类型的Document,我也尝试转换为正确的文档类型..
编辑:问题是db.parse(是)返回org.w3c.dom ..
答案 0 :(得分:4)
确保您的Element
类型为org.dom4j.Element
而不是org.w3c.dom
,javax.bind.xml
等。
换句话说,dom4j API与Java的内置XML API不兼容。除非你使用字符串操作(例如在dom4j中生成XML并使用Java的XML解析它,反之亦然),否则这两者根本不会混合在一起。
答案 1 :(得分:1)
问题解决了!
使用:
DOMReader domReader = new DOMReader();
org.dom4j.Document dom4jDoc = domReader.read(doc);
org.dom4j.Element root = (Element)dom4jDoc.getRootElement();
从org.dom4j.Document
org.w3c.dom.Document