继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用DOM方式解析XML文件

小尾巴都糊了
关注TA
已关注
手记 6
粉丝 16
获赞 112

package com.imooc.domtest.test;

import java.awt.print.Book;
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 DOMTest_1 {

public static void main(String[] args) {
    try {
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = db.parse("Book.xml");
        //获取所有book节点
        NodeList nodeList = document.getElementsByTagName("book");
        //输出一共有多少个book节点
        System.out.println("一共有" + nodeList.getLength() + "本书");
        for (int i = 0; i < nodeList.getLength(); i++) {
            System.out.println("==================下面开始遍历第" + (i+1) + "本书的内容============");
            //循环遍历获取每一个book
            Node book = nodeList.item(i);

            //通过Node对象的getAttributes()方法获取book的所有的属性。注:不是子节点
            NamedNodeMap attrs = book.getAttributes();
            System.out.println("第" + (i+1) + "本书共有" + attrs.getLength() + "个属性");

            for (int j = 0; j < attrs.getLength(); j++) {
                //循环遍历获取book的属性名和属性值
                Node attr = attrs.item(j);
                //获取属性名
                System.out.print("属性名:" + attr.getNodeName());
                System.out.println("--属性值:" + attr.getNodeValue());

            }

            //使用getChildNodes()返回book的所有子节点的集合
            NodeList childeNodes = book.getChildNodes();
            System.out.println("共有" + childeNodes.getLength() + "个子节点");
            //遍历子节点
            for (int k = 0; k < childeNodes.getLength(); k++) {

                //区分出text类型的node以及element类型的node  
                if (childeNodes.item(k).getNodeType()== Node.ELEMENT_NODE) {

                    System.out.print("第" + (k+1) + "个节点名:" 
                + childeNodes.item(k).getNodeName());

                    //直接使用getNodeValue()时会直接输出null,因为'冰与火之歌'本身也代表一个节点, 只不过它是一个简单的TEXT节点
                    //所以这里要获取book子节点的子节点才能正确获取到冰与火之歌
                    System.out.println("--第" + (k+1) + "个节点值:" 
                + childeNodes.item(k).getFirstChild().getNodeValue());

                    //如果子节点里面还嵌套着子节点,如:<name><a>www</a>冰与火之歌</name>,此时层级多了一层 getFirstChild().getNodeValue() 会返回null
                    //getTextContent()方法能够一起输出:www冰与火之歌

/* System.out.println("--第" + (k+1) + "个节点值:"

  • childeNodes.item(k).getTextContent());*/
    }
    }

            System.out.println("==================结束遍历第" + (i+1) + "本书的内容============");
            System.out.println();
        }
    
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    }

    }
    }

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP