知识点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</售价>
</书>
</书架>