Node root = doc.getFirstChild();
NodeList nodes = root.getChildNodes();
for(int i=0;i<nodes.getLength();i++){
NodeList ns = nodes.item(i).getChildNodes();
for(int j=0;j<ns.getLength();j++){
String s=ns.item(j).getTextContent();
System.out.print(s+"   ");
}
System.out.println();
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
<student>
<name>lisi</name>
<id>1001</id>
<age>man</age>
</student>
<student>
<name>zhangsan</name>
<id>1002</id>
<age>man</age>
</student>
<student>
<name>wangwu</name>
<id>1003</id>
<age>man</age>
</student>
<student>
<student>
<name>haha</name>
<student>
<name>hehe</name>
<id>1002</id>
<age>woman</age>
</student>
</student>
</student>
</students>老师上课写了这么一个代码,是获取XLM中各个子节点中的数据的,但是我想不通的是老师只写了2个getChildNodes(),那如果有3层关系的子节点,这个程序是怎么实现获取数据的?(可能我表达的不是那么清楚,我看有的书上写着用递归的方法,那样感觉比较好理解)

解决方案 »

  1.   

    每个节点都是Node
    还是一样的用Node的getChildNodes()来获取子节点列表
      

  2.   

    Node root = doc.getFirstChild();
    得到<students>
    NodeList nodes = root.getChildNodes();
    得到所有的<student>节点
    NodeList ns = nodes.item(i).getChildNodes();
    得到<name>        <id>        <age>节点
      

  3.   

    那我怎么知道name id age节点里面是否还有节点?
      

  4.   

    我的意思是如果name id age节点里如果还有节点的话,可是这时我却已经在遍历ns集合 并且取出节点的内容了
      

  5.   

    如果不是写成API,那么xml的节点结构是能知道的,不可能节点下面的子节点是无限的
    通过判断NodeList==null || NodeList.size() ==0 来判断是否有子节点
      

  6.   

            Node root = doc.getFirstChild();
            NodeList nodes = root.getChildNodes();
            for(int i=0;i<nodes.getLength();i++){
                NodeList ns = nodes.item(i).getChildNodes();
                for(int j=0;j<ns.getLength();j++){
                    String s=ns.item(j).getTextContent();
                    System.out.print(s+"   ");
                }
                System.out.println();
            }我感觉老师这样写有点多此一举啊?又不是ns.item(i).getFirstChild().getNodeValue();
    还不如直接写        Node root = doc.getFirstChild();
            NodeList nodes = root.getChildNodes();
            for(int i=0;i<nodes.getLength();i++){
                    String s=nodes.item(i).getTextContent();
                    System.out.print(s+"   ");
                }
                System.out.println();
            }