Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why getNamespaceURI() always return null?

why getNamespaceURI() always return null? what's wrong in printNSInfo method

public static void main(String[] args) {
    Document input = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(args[0]);
    Element root = input.getDocumentElement();
    printNSInfo(root);
}

private static void printNSInfo(Node node) {
    if (node.getNodeType() == Node.ELEMENT_NODE) {
        if (node.getNamespaceURI() != null) {
            System.out.println("Element Name:" + node.getNodeName());
            System.out.println("Local Name:" + node.getLocalName());
            System.out.println("Namespace Prefix:" + node.getPrefix());
            System.out.println("Namespace Uri:" + node.getNamespaceURI());
            System.out.println("---------------");
        }
        if (node.hasAttributes()) {
            NamedNodeMap map = node.getAttributes();
            int len = map.getLength();
            for (int i = 0; i < len; i++) {
                Node attr = map.item(i);
                if (attr.getNamespaceURI() != null) {
                    printNSInfo(attr);
                }
            }
        }
        Node child = node.getFirstChild();
        System.out.println(child);
        while (child != null) {
            printNSInfo(child);
            child = child.getNextSibling();
        }
    } else if (node.getNodeType() == Node.ATTRIBUTE_NODE) {
        System.out.println("Attribute Name:" + node.getNodeName());
        System.out.println("Local Name:" + node.getLocalName());
        System.out.println("Namespace Prefix:" + node.getPrefix());
        System.out.println("Namespace Uri:" + node.getNamespaceURI());
        System.out.println("---------------");
    }
}

the input xml file is:

<a:NormalExample xmlns:a="http://sonormal.org/" xmlns:b="http://stillnormal.org/">
    <a:AnElement b:anAttribute="text"> </a:AnElement>
</a:NormalExample>

when I debug in eclipse, node.getNamespaceURI() always return null, where am I wrong?

like image 352
Marshal Avatar asked Mar 17 '23 11:03

Marshal


1 Answers

From this, you need to set a flag factory.setNamespaceAware(true), like this:

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document input = builder.parse(args[0]);

    Element root = input.getDocumentElement();
    printNSInfo(root);

And the output is:

Element Name:a:NormalExample
Local Name:NormalExample
Namespace Prefix:a
Namespace Uri:http://sonormal.org/
---------------
...continue...
like image 143
Arturo Volpe Avatar answered Apr 06 '23 03:04

Arturo Volpe