Java采用DOM方式递归遍历XML文件内容

来源:互联网 发布:pop3服务端口 编辑:程序博客网 时间:2024/06/06 18:40

例子中的XML文件内容如下:

<?xml version="1.0" encoding="UTF-8"?><bookstore><book id ="1" ><name>冰与火之歌</name><author>乔治马丁</author><year>2014</year><price>89</price></book><book id="2"><name>安徒生童话</name><year>2004</year><price>89</price><language>English</language></book></bookstore>


代码:

package mytest;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubDocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try {DocumentBuilder db = dbf.newDocumentBuilder();Document book = db.parse("books.xml");NodeList root = book.getChildNodes();for (int i = 0; i < root.getLength(); i++) read(root.item(i));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void read(Node node){NodeList chileNode = node.getChildNodes();//获取node的字节点int length = chileNode.getLength();//获取node字节点的数量if(length == 0){//如果node没有字节点System.out.print(node.getNodeValue());//输出node中的内容}else{//如果node中有字节点System.out.print("<"+node.getNodeName());//输入node的名字NamedNodeMap nnm = node.getAttributes();//获取node节点的属性if(nnm.getLength() != 0){//如果它有属性for (int i = 0; i < nnm.getLength(); i++) {//遍历它的属性Node node2 =  nnm.item(i);//获取第i个属性System.out.print(" "+node2.getNodeName());//输出第i个属性的属性名System.out.print("=\""+node2.getNodeValue()+"\"");//输出第i个属性的属性值}}System.out.print(">");for (int i = 0; i <length ; i++) {//对node的字节点进行递归read(chileNode.item(i));}System.out.println("</"+node.getNodeName()+">");}}}