org.w3c.dom.Document
使用: DocumentBuilderFactory/DocumentBuilder
对以下xml文件进行操作:
<?xml version="1.0" encoding="UTF-8" ?>
- <users>
- <user id="U001">
<name>张三</name>
<age>13</age>
</user>
- <user id="U002">
<name>李四</name>
<age>23</age>
</user>
- <user id="U003">
<name>王五</name>
<age>15</age>
</user>
</users>
1:读取所有有用的节点
@Test
public void test1() throws Exception{
//1:声明dbf对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//2:解析xml文件,返回dom对象
Document dom = db.parse("./files/users.xml");
//3:获取user元素
NodeList nl = dom.getElementsByTagName("user");
int len = nl.getLength();
for(int i=0;i<len;i++){
Element ele = (Element) nl.item(i);//<user>
String id = ele.getAttribute("id");
//以下获取name和age的值
String name = ele.getElementsByTagName("name").item(0).getTextContent();
String age = ele.getElementsByTagName("age").item(0).getTextContent();
System.err.println(id+","+name+","+age);
}
}
//xml中回车,空格也是元素
@Test
public void test2() throws Exception{
//1:声明dbf对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//2:解析xml文件,返回dom对象
Document dom =
db.parse("./files/users.xml");
//3:获取user元素
NodeList nl = dom.getElementsByTagName("user");
//获取第一个usr元素
Element e = (Element) nl.item(0);
int len = e.getChildNodes().getLength();// 获取子元素
System.err.println("个数为:"+len);
}
2.写文件:将内存中的内容写入xml文件中
Transformer
javax.xml.transform
类 Transformer
public abstract class Transformer extends Object
此抽象类的实例能够将源树转换为结果树。
@Test
public void add() throws Exception{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse("./files/users.xml");
//在内在中生成一个元素
Element userElement = dom.createElement("user");
userElement.setAttribute("id", "U005");
Element nameElement = dom.createElement("name");
nameElement.setTextContent("赵七");
Element ageElement = dom.createElement("age");
ageElement.setTextContent("88");
userElement.appendChild(nameElement);
userElement.appendChild(ageElement);
dom.getFirstChild().appendChild(userElement);
//生成一个写文件的对象
TransformerFactory tsf = TransformerFactory.newInstance();
Transformer ts = tsf.newTransformer();
ts.transform(new DOMSource(dom),new StreamResult(new File("./files/users.xml")));
}
3.更改
@Test
public void update() throws Exception{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse("./files/users.xml");
NodeList nl = dom.getElementsByTagName("user");
Element last = (Element) nl.item(nl.getLength()-1);
last.getElementsByTagName("name").item(0).setTextContent("王五");
last.getElementsByTagName("age").item(0).setTextContent("15");
//生成一个写文件的对象
TransformerFactory tsf = TransformerFactory.newInstance();
Transformer ts = tsf.newTransformer();
ts.transform(new DOMSource(dom),new StreamResult(new File("./files/users.xml")));
}
4.删除
@Test
public void delete() throws Exception{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse("./files/users.xml");
NodeList nl = dom.getElementsByTagName("user");
Element last = (Element) nl.item(nl.getLength()-1);
//删除自己
last.getParentNode().removeChild(last);
//生成一个写文件的对象
TransformerFactory tsf = TransformerFactory.newInstance();
Transformer ts = tsf.newTransformer();
ts.transform(new DOMSource(dom),new StreamResult(new File("./files/users.xml")));
}