Home Java DocumentBuilderFactory.parse(); returning null document
Reply: 1

Java DocumentBuilderFactory.parse(); returning null document

display_name
1#
display_name Published in 2018-01-13 02:44:58Z

When I call 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:

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:

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

The return I get is:

Why is it returning a null document?

Max Vollmer
2#
Max Vollmer Reply to 2018-01-13 03:29:22Z

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. Since address is an element node, not a text node, the value is always null (element nodes don't have values, only child nodes). To get the contained text, you either have to get it's direct child, which is a pure text node, or use 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
You need to login account before you can post.

About| Privacy statement| Terms of Service| Advertising| Contact us| Help| Sitemap|
Processed in 0.33044 second(s) , Gzip On .

© 2016 Powered by mzan.com design MATCHINFO