Java之XML(二)解析XML

常见的解析XML方式可分为两大类: (一)JDK自带的解析方式DOM解析SAX解析(二)通过外部jar包解析JDOM解析DOM4J解析下面依次介绍通过每种方式对XML文档解析 DOM解析方式的步骤 1. 创建一个documentbuilderfactory对象 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInsta
摘要由CSDN通过智能技术生成

常见的解析XML方式可分为两大类:
(一)JDK自带的解析方式

  1. DOM解析
  2. SAX解析

(二)通过外部jar包解析

  1. JDOM解析
  2. DOM4J解析

下面依次介绍通过每种方式对XML文档解析
DOM解析方式的步骤
1. 创建一个documentbuilderfactory对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
2.通过documentbuilderfactory创建DocumentBuilder
db=dbf.newDocmentBuilder();
3. 通过DocumentBuilder的parse获取文件
Document doc=db.parse(“books.xml”);(一定要是org.w3c包下的Document)
得到Document对象之后,我们就可以通过doc来完成对xml文档的解析工作了

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>安徒生童话</name>
        <author>安徒生</author>
        <price>69</price>
    </book>
    <book id="2">
        <name>绝世唐门</name>
        <author>唐家三少</author>
        <price>88</price>
        <language>English</language>
    </book>
</bookstore>

解析XML文档

public static void resXml()throws Exception{
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc=db.parse("books.xml");

        NodeList books = doc.getElementsByTagName("book");
        System.out.println(books.getLength());
        //遍历每一个节点(每一本书)
        for(int i=0;i<books.getLength();i++){
            System.out.println("第"+(i+1)+"本书");
            Node book = books.item(i);
            //每个节点的属性
            NamedNodeMap attrs=book.getAttributes();
            for(int j=0;j<attrs.getLength();j++){
                Node d = attrs.item(j);
                System.out.println(d.getNodeName()+":"+d.getNodeValue());
            }
            //获取book的子节点
            NodeList bookAttr=book.getChildNodes();
            //System.out.println(bookAttr.getLength());
            //输出每个子节点的内容
            for(int k=0;k<bookAttr.getLength();k++){
                Node node = bookAttr.item(k);
                //在xml中换行的空格都代表节点
                //所以我们输出内容不是空格的节点
                if(node.getNodeType()!=3){
                    System.out.println(node.getNodeName()+":"+node.getFirstChild().getNodeValue());
                }
            }
        }
    }

解析结果:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值