Java org.apache.xerces.dom.DeferredDocumentImpl与org.dom4j.Document不兼容
我正在从一个URL读一些RSS,遇到了一些麻烦。 最初,我有一个简单的实现,如下所示:Java org.apache.xerces.dom.DeferredDocumentImpl与org.dom4j.Document不兼容,java,document,xerces,Java,Document,Xerces,我正在从一个URL读一些RSS,遇到了一些麻烦。 最初,我有一个简单的实现,如下所示: SAXReader reader = new SAXReader(); Document doc = reader.read(new URL(sURL)); 但是,如果响应非常慢,这不允许我超时请求。所以我把它改成: public static org.dom4j.Document readXml(InputStream is) throws SAXException, IOException,
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
我怎样才能避免这种情况?上述方法都不应返回该类型的文档,我也尝试转换为正确的文档类型
编辑:问题是db.parse(is),它返回org.w3c.dom..请确保
元素的类型为org.dom4j.Element
,而不是org.w3c.dom
,javax.bind.xml
等
换句话说,dom4japi与Java的内置xmlapi不兼容。除非您使用字符串进行操作(例如,在dom4j中生成XML并用Java的XML进行解析,反之亦然),否则这两种元素不会混合在一起。确保元素的类型为org.dom4j.Element
,而不是org.w3c.dom
,javax.bind.XML
,等等
换句话说,dom4japi与Java的内置xmlapi不兼容。除非您使用字符串进行操作(例如,在dom4j中生成XML并用Java的XML进行解析,反之亦然),否则这两种方法不会混合在一起。问题解决了
通过使用:
DOMReader domReader = new DOMReader();
org.dom4j.Document dom4jDoc = domReader.read(doc);
org.dom4j.Element root = (Element)dom4jDoc.getRootElement();
要从org.w3c.dom.Document
创建org.dom4j.Document
,问题已解决
通过使用:
DOMReader domReader = new DOMReader();
org.dom4j.Document dom4jDoc = domReader.read(doc);
org.dom4j.Element root = (Element)dom4jDoc.getRootElement();
要从org.w3c.dom.Document
创建org.dom4j.Document
,问题在于db.parse()方法。它返回类型为org.w3c.dom的对象。问题是db.parse()方法。它返回类型为org.w3c.dom的对象