【问题标题】:How to parse the XML file and check each element having children or not in Java?如何在 Java 中解析 XML 文件并检查每个元素是否有子元素?
【发布时间】:2015-11-09 10:59:46
【问题描述】:

我有一个如下的 XML 文件:

<customers>
    <customer>
        <name>XXX</name>
        <address>Nagar</address>
        <number>
             <num1>123</num1>
             <num2>456</num2>
        </number>
    </customer>
    <customer>
        <name>YYY</name>
        <address>Nagar</address>
        <number>
             <num1>789</num1>
             <num2>012</num2>
        </number>
    </customer>
</customers>

我需要从上到下解析整个XML,得到每个元素的子节点信息。

异常输出:(node = children)

customers = customer,customer
customer = name,address,number
name = null
address = null
number = num1,num2
num1 = null
num2 = null
customer = name,address,number
name = null
address = null
number = num1,num2
num1 = null
num2 = null

我为此使用了 DOM。下面给出代码:

NodeList nodeList = doc.getElementsByTagName("*");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
    if (node.getNodeType() == Node.ELEMENT_NODE) {
       System.out.println(node.getNodeName()+" = "+node.getChildNodes());
    }
}

但是我得到这样的输出:

customers = [customers: null]
customer = [customer: null]
name = [name: null]
address = [address: null]
number = [number: null]
num1 = [num1: null]
num2 = [num2: null]
customer = [customer: null]
name = [name: null]
address = [address: null]
number = [number: null]
num1 = [num1: null]
num2 = [num2: null]

你能帮我解决这个问题吗?

【问题讨论】:

    标签: java xml xml-parsing


    【解决方案1】:

    您的循环中需要另一个循环,以遍历子项

    这行得通:

    NodeList nodeList = document.getElementsByTagName("*");
    for (int i = 0; i < nodeList.getLength(); i++)
        {
        Node node = nodeList.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE)
            {
            Element element=(Element) node;
    
            System.out.print(element.getNodeName()+" = ");
            boolean is_first_child=true;
    
            // CHILDS
            NodeList nodechilds=node.getChildNodes();
    
            for (int j = 0; j < nodechilds.getLength(); j++)
                {
                Node a_child = nodechilds.item(j);
    
                if (a_child.getNodeType() == Node.ELEMENT_NODE)
                    {
                    if (!is_first_child) System.out.print (",");
                    System.out.print (a_child.getNodeName());
    
                    is_first_child=false;
                    }
                }
    
        if (is_first_child) System.out.print ("null");
        System.out.println();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      相关资源
      最近更新 更多