将文档作为null [#document:null]使用DocumentBuilder在java中解析XML之后

时间:2011-04-17 16:05:06

标签: xml null document

解析documengt后,即使文档包含数据,我也会变为空。 这是我的代码,我已将所有验证设置为false。

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();

    domFactory.setNamespaceAware(false); // never forget this!
    domFactory.setCoalescing(false);
    domFactory.setValidating(false);
    domFactory.setFeature("http://xml.org/sax/features/namespaces", false);
    domFactory.setFeature("http://xml.org/sax/features/validation", false);
    domFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
    domFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    domFactory.setFeature("http://apache.org/xml/features/allow-java-encodings",
                       true);



    DocumentBuilder builder = domFactory.newDocumentBuilder();

    builder.setEntityResolver(new EntityResolver() {
        public InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
                throws SAXException, java.io.IOException {
            if (publicId.equals("--myDTDpublicID--"))
                // this deactivates the open office DTD
                return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
            else return null;
        }
    });


    Document doc = null;
    URL url = new URL(urlStr);
    URLConnection urlc = url.openConnection();



    doc = builder.parse(urlc.getInputStream());
    System.out.println("doc:" + doc.toString());

回复如下:

doc:[#document: null]

为什么呢? 我错过了一些验证吗?

2 个答案:

答案 0 :(得分:14)

[#document: null]只是doc实例的toString,它不会输出整个XML文档。

实例本身不为空,您可以继续处理而不会出现问题。

答案 1 :(得分:-1)

你应该将static修饰符添加到Document对象中,我遇到了同样的问题,并且在解析操作之后,所有非静态对象都只是引用null。使其静态以某种方式强制java在变量的解析操作期间保持对创建对象的引用。