Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.apache.xerces.dom.DeferredDocumentImpl与org.dom4j.Document不兼容_Java_Document_Xerces - Fatal编程技术网

Java org.apache.xerces.dom.DeferredDocumentImpl与org.dom4j.Document不兼容

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,

我正在从一个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
我怎样才能避免这种情况?上述方法都不应返回该类型的文档,我也尝试转换为正确的文档类型


编辑:问题是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的对象