XML编程

 

XML编程

Dom解析流程

dom以对象的方式解析

缺点:占用内存比较多(如果文件比较大),不适合大文档。全部内容读物到内存,创建document对象

优点:增删改查比较方便。

 

Sax  读取一行就处理一行,占用的内存比较少,解析速度快。

缺点:不适合增删改,适合读取

 

调整jvm大小:

Runconfiguretion

 

 

Jaxp

使用jasp进行dom解析:

 book.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 [
	<!ELEMENT 书架 (书+)>
	<!ELEMENT 书 (书名,作者,售价)>
	<!ELEMENT 书名 (#PCDATA)>
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>
]>

<书架>
	<书>
		<书名 name="xxx">钢铁是怎样炼成的</书名>
		<作者>尼·奥斯特洛夫斯基 </作者>
		<售价>16.5</售价>
	</书>
	<书>
		<书名>假如给我三天光明</书名>
		<作者>海伦·凯勒 </作者>
		<售价>17.6</售价>
	</书>
</书架>
package cn.xml;

import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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



//使用dom方式对xml文档进行增删改查
public class Demo3 {
	
	//读取xml文档中的<书名>钢铁是怎样炼成的</书名> 节点中的值
	@Test
	public void read() throws Exception{
		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");
		
		NodeList list=document.getElementsByTagName("书名");
		Node node = list.item(0);
		String content = node.getTextContent();
		System.out.println(content);
	}
	
	//得到xml中的文档标签  
	@Test
	public void read1() throws Exception{
		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");
		
		//得到根节点
		Node root = document.getElementsByTagName("书架").item(0);
		list(root);
		
	}
	private void list(Node node){
		if (node instanceof Element){
			System.out.println(node.getNodeName());
		}
		
		NodeList list = node.getChildNodes();
		for (int i=0;i<list.getLength();i++){
			Node child = list.item(i);
			list(child);
		}
		
		
	}
	
	//得到xml中的文档标签 属性的值 
	@Test
	public void read2() throws Exception{
		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");
		
		//Node node = document.getElementsByTagName("书名").item(0);
		Element node = (Element) document.getElementsByTagName("书名").item(0);
		String str = node.getAttribute("name");
		System.out.println(str);
		
		
	}
	
	//得到xml中添加节点:<售价>59.00元</售价>
		@Test
		public void add() throws Exception{
			DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			//创建节点
			Element price = document.createElement("售价");
			price.setTextContent("59.00元");
			//把创建的节点挂到第一本书上
			Node node = document.getElementsByTagName("书").item(0);
			node.appendChild(price);
			
			//把更新后的内存写回到xml文档
			TransformerFactory tffaxtory = TransformerFactory.newInstance();
			Transformer tf= tffaxtory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/bppk.xml")));	
		}
		
		//得到xml中指定位置添加节点:<售价>59.00元</售价>
		@Test
		public void add2() throws Exception{
			DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			//创建节点
			Element price = document.createElement("售价");
			price.setTextContent("59.00元");
			
			//得到参考节点
			Element refnode = (Element) document.getElementsByTagName("售价").item(0);
			//得到父节点
			Node node = document.getElementsByTagName("书").item(0);
			
			//向父节点的指定节点插入
			node.insertBefore(price, refnode);
			
			//把更新后的内存写回到xml文档
			TransformerFactory tffaxtory = TransformerFactory.newInstance();
			Transformer tf= tffaxtory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/bppk.xml")));	
		}
		//得到xml中文档节点中添加属性。<书名>钢铁是怎样炼成的</书名>添加name="xxx";
		@Test
		public void addattr() throws Exception{
			DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			Element node = (Element) document.getElementsByTagName("书名").item(0);
			node.setAttribute("name", "xxx");
			//把更新后的内存写回到xml文档
			TransformerFactory tffaxtory = TransformerFactory.newInstance();
			Transformer tf= tffaxtory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/bppk.xml")));	
		}
		//删除xml中指定标签
		@Test
		public void delete() throws Exception{
			DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			//得到要删除的节点
			Element node = (Element) document.getElementsByTagName("售价").item(0);
			//得到要删除节点的父节点:
			Element fnode = (Element) document.getElementsByTagName("书").item(0);
			//父节点删除
			fnode.removeChild(node);
			//或者   node.getParentNode().removeChild(node);   上面三步可简化成一步;
			//node.getParentNode().getParentNode().removeChild(node.getParentNode());  删除父节点 
			
			//把更新后的内存写回到xml文档
			TransformerFactory tffaxtory = TransformerFactory.newInstance();
			Transformer tf= tffaxtory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/bppk.xml")));	
		}
		
		//更新价格
		@Test
		public void uodate() throws Exception{
			DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			Element e = (Element) document.getElementsByTagName("售价").item(0);
			e.setTextContent("109元");
			
			//把更新后的内存写回到xml文档
			TransformerFactory tffaxtory = TransformerFactory.newInstance();
			Transformer tf= tffaxtory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/bppk.xml")));	
			
		}
	
	
}

 

 

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/82773827
今日推荐