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本書============
楼上正解,你的循环变量写错了。
第二个for循环里的“Node node=list.item(j);”写错了,把 j 改成 n