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

来源:互联网 发布:淘宝天下小二是干嘛的 编辑:程序博客网 时间:2024/06/05 16:17

知识点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文档进行crudpublic class Demo2 {@Testpublic void read1() throws Exception{//创建工厂DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();//得到dom解析器    DocumentBuilder builder = factory.newDocumentBuilder();//解析xml文档,得到代表文档的documentDocument document = builder.parse("src/book.xml");//读取xml文档中:<书名>数据结构</书名>NodeList list = document.getElementsByTagName("书名");Node node = list.item(1);String content =  node.getTextContent();    System.out.println(content);}@Testpublic void read2() throws Exception{//创建工厂DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();//得到dom解析器    DocumentBuilder builder = factory.newDocumentBuilder();//解析xml文档,得到代表文档的documentDocument 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</售价>   </书></书架>