对XML文档进行JAXP的DOM解析

本文介绍了使用Java自带的JAXP进行XML文档解析的方法,包括DOM和SAX解析器的特点对比,通过解析示例展示如何获取XML文档中的元素、属性及文本内容,并提供了关键代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说一下对XML文档解析的两种方法的好坏

DOM的CRUD方便,缺点是占用内存比较大
SAX 占用内存小 解析速度快 缺点是只适合做文档的读取 不适合CRUD

下面我将使用java 自带的JAXP进行XML文档的解析

首先将book.xml解析文档贴上来

<?xml version="1.0" encoding="UTF-8" ?> <书架> <书> <书名 name="12345">java就业培训</书名> <作者>张孝祥</作者> <售价>30.00元</售价> </书> <书> <书名>JavaScript开发详解</书名> <作者>张孝祥</作者> <售价>15.00</售价> </书> </书架>

下面是解析代码

package com.bird.xml; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * @use 对XML文档进行JAXP的DOM解析 * @author Bird * */ public class XmlReader { public Document getDocument() throws Exception{//返回XML文档的Document对象 //1创建工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //2.得到解析器 DocumentBuilder builder = factory.newDocumentBuilder(); //3.解析XML文档,获得代表文档的Document Document document = builder.parse("d://book.xml"); return document; } public void read1() throws Exception{//读取指定标签下的内容 Document document = getDocument(); NodeList list = document.getElementsByTagName("书名"); for(int i = 0; i < list.getLength(); i++){ Node node = list.item(i); System.out.println(node.getTextContent()); } } public void read2() throws Exception{//得到XML中所有的节点名字 Document document = getDocument(); //得到根节点 NodeList list = document.getElementsByTagName("书架"); for(int i = 0; i < list.getLength(); i++){ Node node = list.item(i); listNode(node);//遍历这个节点的下面的子节点 } } private void listNode(Node node){//递归调用标签名字 if(node instanceof Element){//判断是否是Element对象,否则会解析换行符出现#Text System.out.println(((Element) node).getTagName()); } NodeList list = node.getChildNodes();//得到node 的子节点 for(int i = 0; i < list.getLength(); i++){ Node child = list.item(i); listNode(child);//递归调用打印出下面的子节点 } } public void read3() throws Exception{//得到标签属性的值 Document document = getDocument(); Element bookname = (Element)document.getElementsByTagName("书名").item(0);//第一个标签的属性,强制转换成Element更方便 System.out.println(bookname.getAttribute("name")); } public static void main(String[] args) throws Exception{//测试 XmlReader reader = new XmlReader(); //reader.read1(); //reader.read2(); reader.read3(); } } 代码上面的注释写的差不多了,估计也不需要什么解释,呵呵,就这样挂把,感觉JAVA自带的解析方式挺好玩的,很简单,就是那个递归有点绕圈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值