您的位置:首页 > 其它

JAXP DOM 增加、查询、更新、删除

2018-07-19 14:57 330 查看

XML数据

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>Java编程基础</name>
<price>88</price>
</book>

<book>
<name>Java高级应用</name>
<price>99</price>
</book>
</books>

解析代码

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
* Created by Administrator on 2018/7/7 17:14 in Beijing.
*/

public class DOMTest {
@Test
public void demo1() throws ParserConfigurationException, IOException, SAXException {
//构造工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//通过工厂获得解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//使用解析器加载xml文档
Document document = builder.parse("./src/main/resources/books.xml");

NodeList nodeList = document.getElementsByTagName("name");
for(int i = 0 ; i < nodeList.getLength() ; i++) {
Node node = nodeList.item(i);   //这里每个 Node 都是<name></name>元素
Element element = (Element) node;   //将节点转换为子类型节点
System.out.println(element.getNodeName());
System.out.println(element.getNodeType());
System.out.println(element.getNodeValue());
System.out.println(element.getTextContent());
System.out.println("---------------");
}
}
}

输出

name
1
null
Java编程基础
---------------
name
1
null
Java高级应用
---------------

Process finished with exit code 0


读取查询(Retrieve)

@Test
public void demo2() throws ParserConfigurationException, IOException, SAXException {
//构造工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//通过工厂获得解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//使用解析器加载xml文档
Document document = builder.parse("./src/main/resources/books.xml");

NodeList nodeList = document.getElementsByTagName("name");
for(int i = 0; i < nodeList.getLength(); i++) {
Element name = (Element) nodeList.item(i);
if (name.getTextContent().equals("Java编程基础")) {
Element price = (Element) name.getNextSibling().getNextSibling();
System.out.println("price\t"+price.getTextContent());
}
}
}

输出

price	88

Process finished with exit code 0

增加(Create)

@Test
public void demo3() throws ParserConfigurationException, IOException, SAXException, TransformerException {
//构造工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//通过工厂获得解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//使用解析器加载xml文档
Document document = builder.parse("./src/main/resources/books.xml");

//添加节点
Element newBook = document.createElement("book");
Element newName = document.createElement("name");
newName.setTextContent("葵花宝典");
newBook.appendChild(newName);

Element root = document.getDocumentElement();
root.appendChild(newBook);

//回写XML
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);  //用 dom 构造数据源
StreamResult  streamResult = new StreamResult(new java.io.File("./src/main/resources/books_bak.xml"));
transformer.transform(domSource, streamResult);
}

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>
<book>
<name>Java编程基础</name>
<price>88</price>
</book>

<book>
<name>Java高级应用</name>
<price>99</price>
</book>
<book><name>葵花宝典</name></book></books>

更新(Update)

@Test
public void demo4() throws ParserConfigurationException, IOException, SAXException, TransformerException {
//构造工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//通过工厂获得解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//使用解析器加载xml文档
Document document = builder.parse("./src/main/resources/books.xml");

NodeList nodeList = document.getElementsByTagName("name");
for(int i =0 ;  i < nodeList.getLength() ; i++) {
Element name = (Element) nodeList.item(i);
if(name.getTextContent().equals("Java高级应用")) {
Element price = (Element) name.getNextSibling().getNextSibling();
double money = Double.parseDouble(price.getTextContent());
money *= 1.2 ;
price.setTextContent(String.valueOf(money));
}
}

//回写XML
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);  //用 dom 构造数据源
StreamResult  streamResult = new StreamResult(new java.io.File("./src/main/resources/books_bak.xml"));
transformer.transform(domSource, streamResult);
}

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>
<book>
<name>Java编程基础</name>
<price>88</price>
</book>

<book>
<name>Java高级应用</name>
<price>118.8</price>
</book>
</books>

删除(Delete)

@Test
public void demo5() throws ParserConfigurationException, IOException, SAXException, TransformerException {
//构造工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//通过工厂获得解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//使用解析器加载xml文档
Document document = builder.parse("./src/main/resources/books.xml");

NodeList nodeList = document.getElementsByTagName("name");
for(int i =0 ;  i < nodeList.getLength() ; i++) {
Element name = (Element) nodeList.item(i);
if(name.getTextContent().contains("Java")) {
Element book = (Element) name.getParentNode();
//删除必须通过父节点
book.getParentNode().removeChild(book);
i--;    //修复List长度
}
}

//回写XML
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);  //用 dom 构造数据源
StreamResult  streamResult = new StreamResult(new java.io.File("./src/main/resources/books_bak.xml"));
transformer.transform(domSource, streamResult);
}

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?><books>

</books>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAXP Element
相关文章推荐