问答详情
源自:2-3 使用 DOM 解析XML 文件的节点名和节点值

求大神指出问题?

package xmldemo;


import java.io.IOException;


import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;


import org.w3c.dom.Document;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;


public class TestXml {


public static void main(String[] args) {

//创建一个DocumentBuilderFactory的对象

DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();

Document document;

try {

DocumentBuilder db=dbf.newDocumentBuilder();

document = db.parse("books.xml");

NodeList booklist=  document.getElementsByTagName("book");

for(int i =0;i<booklist.getLength();i++){

System.out.println("==========下面開始遍歷第"+(i+1)+"本書============");

Node book= booklist.item(i);

NamedNodeMap attrs=book.getAttributes();

for (int j = 0; j <attrs.getLength() ; j++) {

Node attr=attrs.item(j);

System.out.print("屬性名: "+attr.getNodeName());

System.out.println("----屬性值: "+attr.getNodeValue());

 

NodeList list=book.getChildNodes();

System.out.println("第"+(i+1)+"本书的"+"共有 "+list.getLength()+"个子节点 ");

 

for (int n = 0; n <list.getLength(); n++) {

Node node=list.item(j);

System.out.println(node.getNodeName());

}

 

System.out.println("==========完成遍歷第"+(i+1)+"本書============");

}

} catch (ParserConfigurationException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch (SAXException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch (IOException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}


}


}



结果

==========下面開始遍歷第1本書============

屬性名: id----屬性值: 1

第1本书的共有 9个子节点 

#text

#text

#text

#text

#text

#text

#text

#text

#text

==========完成遍歷第1本書============

==========下面開始遍歷第2本書============

屬性名: id----屬性值: 2

第2本书的共有 9个子节点 

#text

#text

#text

#text

#text

#text

#text

#text

#text

==========完成遍歷第2本書============


提问者:qq_张浩_7 2016-08-29 11:05

个回答

  • 丑丶小亚
    2018-02-02 09:59:43

    楼上正解,你的循环变量写错了。

  • elec_Russell
    2016-08-29 13:32:40

    第二个for循环里的“Node node=list.item(j);”写错了,把 j 改成 n