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
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
Node node = nodeList.item(i)
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
name
1
null
Process finished with exit code 0
读取查询(Retrieve)
@Test
public void demo2() throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
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();
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);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
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();
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));
}
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
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();
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--;
}
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
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>