DOM方式解析XML文档 解析器Parser;三种Node区别 ElementNode AttributeNode TextNode

目标:解析books.xml文档并输出图书信息

这里写图片描述

1. 解析器Parser

首先解析XML文件之前要理解 解析器Parser是个什么东西

所谓 parser,一般是指把某种格式的文本(字符串)转换成某种数据结构的过程。最常见的> parser,是把程序文本转换成编译器内部的一种叫做“抽象语法树”(AST)的数据结构。我们用记事本写的xml只是文本文件,

简单说,文本文件使用parser解析后才是代码 好比1+2经过解析后编译器才知道这里有两个数1 ,2 然后相加了

所以解析一个xml文档要3个类DBF-DB 最后才得到Document

//newInstance声明 获得一个剖析器parser
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
//DocumentBuilder得到一个文档剖析器实例
DocumentBuilder db =dbf.newDocumentBuilder();
//从XML得到一个文档
Document document=db.parse("books.xml");

DocumentBuilderFactory官方定义

DocumentBuilderFactory官方定义
用于创建解析器

DocumentBuilder官方定义
DocumentBuilder官方定义
用于创建将XML转换为文档Document的文档解析器
因而先要从Factory里面创建一个解析器,再创建具体的文件解析器,再得到文档;

2.XML三种类型Node是什么和不同
<book name="属性">我是文本,会被识别为TextNode</book>

<></>这是一个ElementNode
id=”1”这一对键值对是Attribute Node
之间的纯文本会被识别为一个子节点 TextNode
他们对应的属性名和属性值
这里写图片描述

Document document=db.parse("books.xml");
            //遍历循环获得所有的book Element
            NodeList books=document.getElementsByTagName("book");
            for (int i=0;i<books.getLength();i++) {
                //强转 从Node类型转换为Element类型 每个book是一个Element
                Element book=(Element) books.item(i);
                //Element getNodeName有返回值(book) 没有Value;
                String EleName=book.getNodeName();
                //读取Element里的Attribute Node  可以用属性名来得到属性值
                //也可以用getAttributes()得到所有属性给NamedNodeMap得到Attribute键值对  
                //Name-属性名  Value-属性值
                String attrValue=book.getAttribute("id");
                System.out.println("Element属性名:"+EleName);
                System.out.println("Attribute属性值:"+attrValue);
                //ChildNode得到字节点
                NodeList ChildNode=book.getChildNodes();
                for(int k=0;k<ChildNode.getLength();k++){
                    //中间有文本空白 会被识别为TextNode  属性名为#Text 属性值为文本内容
                    //判断是ElementNode 输出属性名 当然还是没有属性值 
                    if(ChildNode.item(k).getNodeType()==Node.ELEMENT_NODE){
                        //中间文本会被当做第一个子节点
//                      System.out.println(ChildNode.item(k).getNodeName()+" "+ChildNode.item(k).getFirstChild().getNodeValue());
                        //也可以直接读取Element间文本内容;
                        System.out.println(ChildNode.item(k).getNodeName()+" "+ChildNode.item(k).getTextContent());
                    }
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值