<?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")));
}
}