简体   繁体   English

Java DocumentBuilderFactory.parse(); 返回空文档

[英]Java DocumentBuilderFactory.parse(); returning null document

When I call DocumentBuilderFactory.parse(xml-file-path); 当我调用DocumentBuilderFactory.parse(xml-file-path); , it returns a null document. ,它返回一个空文档。 I am 100% sure that the file path for the document is right.My full code is as follows: 我100%确信文档的文件路径正确。我的完整代码如下:

public static boolean readXML(String xml) {
    Document dom;
    // Make an instance of the DocumentBuilderFactory
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {
        // use the factory to take an instance of the document builder
        DocumentBuilder db = dbf.newDocumentBuilder();
        // parse using the builder to get the DOM mapping of the
        // XML file
        dom = db.parse(xml);

        System.out.println(dom + " " + xml + " " + dom.getElementById("1"));

        Element doc = dom.getDocumentElement();

        System.out.println(doc);

        address = getTextValue(address, doc, "address");
        System.out.println(address);
        return true;

    } catch (ParserConfigurationException pce) {
        System.out.println(pce.getMessage());
    } catch (SAXException se) {
        System.out.println(se.getMessage());
    } catch (IOException ioe) {
        System.err.println(ioe.getMessage());
    }

    return false;
}

and

XMLReaderWriter.readXML("C:\\Users\\username\\eclipse-workspace\\project\\src\\preferences.xml");

Preferences.xml is simply: Preferences.xml很简单:

<address>idk just filler for now</address>

The return I get is: 我得到的回报是:

错误

Why is it returning a null document? 为什么返回空文档?

It doesn't give you a "null document", it gives you exactly the document you provided. 它不会为您提供“空文档”,它会为您提供您所提供的文档。 address is your only element and is therefore treated as the document root element. 地址是您唯一的元素,因此被视为文档根元素。 The toString() method of your element object prints element name and element value. 元素对象的toString()方法显示元素名称和元素值。 Since address is an element node, not a text node, the value is always null (element nodes don't have values, only child nodes). 由于address是元素节点,而不是文本节点,因此该值始终为null (元素节点没有值,只有子节点)。 To get the contained text, you either have to get it's direct child, which is a pure text node, or use getTextContent(). 要获取包含的文本,您必须获取它的直接子节点(即纯文本节点),或者使用getTextContent()。

System.out.println(doc);
System.out.println(doc.getFirstChild());
System.out.println(doc.getTextContent());

will print 将打印

[address: null]
[#text: idk just filler for now]
idk just filler for now

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM