JAXP操作xml

<?xml version="1.0" encoding="UTF-8"?>
<书架>
  <书>
    <书名 name="张三">书名1</书名>
    <作者>作者1</作者>
    <售价>121</售价>
  </书>
  <书>
    <书名>书名2</书名>
    <作者>作者2</作者>
    <售价>122</售价>
  </书>
</书架>

import static org.junit.Assert.*;

import java.io.File;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Demo1 {
	Document document=null;
	@Before
	public void before() throws Exception{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		document = builder.parse(new File(Demo1.class.getResource("book.xml").getFile()));
	}
	@Test
	public void test1(){
		System.out.println(document.getElementsByTagName("书名").item(1).getTextContent());
	}
	//遍历xml标签
	@Test
	public void test2(){
		Node node = document.getElementsByTagName("书架").item(0);
		list(node);
	}
	//得到标签属性
	@Test
	public void test3() throws Exception {
		Element element=(Element)document.getElementsByTagName("书名").item(0);
		String attribute = element.getAttribute("name");
		System.out.println(attribute);
	}
	private void list(Node node) {
		if(node instanceof Element)
			System.out.println(node.getNodeName());
		NodeList childNodes = node.getChildNodes();
		for (int i = 0; i < childNodes.getLength(); i++) {
			Node item = childNodes.item(i);
			list(item);
		}
	}
	//添加节点
	@Test
	public void add() throws Exception {
		//创建节点
		Element price = document.createElement("售价");
		price.setTextContent("29元");
		//得到第一本书的节点
		Element book1 = (Element) document.getElementsByTagName("书").item(0);
		book1.appendChild(price);
		//把更新后的内存数据写入到xml文档中
		TransformerFactory tfFactory = TransformerFactory.newInstance();
		Transformer transformer = tfFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src\\main\\java\\com\\tls\\xml\\1.xml")));
	}
	
	//添加节点,在第一本书的售价之前插入售价
	@Test
	public void add1() throws Exception {
		//创建节点
		Element price = document.createElement("售价");
		price.setTextContent("222元");
		//得到第一本书的节点
		Element book1 = (Element) document.getElementsByTagName("书").item(0);
		book1.appendChild(price);
		//得到参考节点
		Element price1 = (Element) document.getElementsByTagName("售价").item(0);
		
		book1.insertBefore(price1, price);
		
		//把更新后的内存数据写入到xml文档中
		TransformerFactory tfFactory = TransformerFactory.newInstance();
		Transformer transformer = tfFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src\\main\\java\\com\\tls\\xml\\book.xml")));
	}
	//给节点添加属性
	@Test
	public void addAttr() throws Exception {
		Element element=(Element)document.getElementsByTagName("书名").item(0);
		element.setAttribute("name1", "xxx");
		//把更新后的内存数据写入到xml文档中
		TransformerFactory tfFactory = TransformerFactory.newInstance();
		Transformer transformer = tfFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src\\main\\java\\com\\tls\\xml\\book.xml")));
	}
	//删除节点
	@Test
	public void delete1() throws Exception {
		Element book=(Element)document.getElementsByTagName("书").item(0);
		Element price=(Element)document.getElementsByTagName("售价").item(0);
		book.removeChild(price);
		//把更新后的内存数据写入到xml文档中
		TransformerFactory tfFactory = TransformerFactory.newInstance();
		Transformer transformer = tfFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src\\main\\java\\com\\tls\\xml\\book.xml")));
	}
	//删除节点
	@Test
	public void delete2() throws Exception {
		Element price=(Element)document.getElementsByTagName("售价").item(0);
		price.getParentNode().removeChild(price);
		//把更新后的内存数据写入到xml文档中
		TransformerFactory tfFactory = TransformerFactory.newInstance();
		Transformer transformer = tfFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src\\main\\java\\com\\tls\\xml\\book.xml")));
	}
	
	//更新节点
	@Test
	public void update() throws Exception {
		Element price=(Element)document.getElementsByTagName("售价").item(0);
		price.setTextContent("11元");
		//把更新后的内存数据写入到xml文档中
		TransformerFactory tfFactory = TransformerFactory.newInstance();
		Transformer transformer = tfFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src\\main\\java\\com\\tls\\xml\\book.xml")));
	}
}

猜你喜欢

转载自blog.csdn.net/u011244410/article/details/80855566