Javaweb-xml编程-Jaxp解析xml文档

知识点1:xml解析概述

XML解析方式:dom和sax

XML解析开发包:Jdom、dom4j、Jaxp

Dom和sax解析方法的区别:

--1.dom解析的优点是对文档crud(create read update delete)比较方便,缺点是占用内存比较大;

--2.sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud。

---------------------------------------------------------------------------

知识点2:调整JVM内存大小

通常我们会使用dom进行增删改查,这样有的时候就会造成Java虚拟机内存溢出。

提示错误:outofMemoryError

控制Java虚拟机内存大小:①点击程序②RunAs->RunConfigurations③Arguments④VMarguments中填写-Xmx80m(表示将内存调制80m)

-----------------------------------------------------------------------------

知识点3:使用Jaxp对xml文档进行解析

--JAXP开发包是J2EE的一部分,使用时不需要导包‘

--javax.xml.parsers包中的DocumentBuiiderfactory(抽象解析类,不能直接实例化)用于创建DOM模式的解析器对象。

--使用newDocumentBuilder()得到DOM解析器,使用parse()方法对xml进行解析

实例说明:

package xml;

import javax.lang.model.element.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

//使用dom方法对xml文档进行crud
public class Demo2 {
	@Test
	public void read1() throws Exception{
		//创建工厂
		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
					
		//得到dom解析器
	    DocumentBuilder builder = factory.newDocumentBuilder();
						
		//解析xml文档,得到代表文档的document
		Document document = builder.parse("src/book.xml");
	
		//读取xml文档中:<书名>数据结构</书名>
		NodeList list = document.getElementsByTagName("书名");
		Node node = list.item(1);
	
		String content =  node.getTextContent();
	    System.out.println(content);
	}
	@Test
	public void read2() throws Exception{
		//创建工厂
		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
					
		//得到dom解析器
	    DocumentBuilder builder = factory.newDocumentBuilder();
						
		//解析xml文档,得到代表文档的document
		Document document = builder.parse("src/book.xml");
	
		//得到根节点
		Node root = document.getElementsByTagName("书架").item(0);
		//递归的方法,得到孩子,孩子的孩子
		list(root);
		//得到所有标签名称
	}
	private void list(Node node){
		if(node instanceof Element){
		//判断node是不是一个标签,不是标签就什么都不做
	    System.out.println(node.getNodeName());
		}//一调用这个方法就打印
	    NodeList list = node.getChildNodes();
	    for(int i=0;i<list.getLength();i++){
	    	Node child = list.item(1);
	    	list(child);
	    }
	}
		
}


注:xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSETEM "book.dtd">
<书架>
   <书>
         <书名>数据结构</书名>
         <作者>严蔚敏</作者>
         <售价>39.0元</售价>
   </书>
   <书>
         <书名>大话设计模式</书名>
         <作者>程杰</作者>
         <售价>45.0</售价>
   </书>
</书架>



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值