使用DOM对象处理XML
2、修改XML文件并保存
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<name>Assad</name>
<age>22</age>
<home>Shanghai</home>
</person>
<person>
<name>John</name>
<age>19</age>
<home>GuangZhou</home>
</person>
</persons>
1、读取XML文件
//Java读取XML文件
public static void readXML(){
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("test.xml"));
Element rootElement = document.getDocumentElement(); //获取Document对象的根元素;
NodeList personList = rootElement.getElementsByTagName("person"); //获取节点元素列表
for(int i=0;i<personList.getLength();i++){ //循环处理person节点对象
Element person = (Element)personList.item(i);
for(Node node = person.getFirstChild() ; node!=null ; node = node.getNextSibling()){ //循环处理每个perosn节点中的所有子节点
if(node.getNodeType() == Node.ELEMENT_NODE){
String key = node.getNodeName(); //获取该节点的标签名
String value = node.getFirstChild().getNodeValue(); //获取该节点的值
System.out.println(key+":"+value);}
}
}
}catch(Exception ex){
ex.printStackTrace();
}
- }
public static void updateAndSave(){
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("test.xml"));
Element persons = document.getDocumentElement(); //获取根节点<persons>
//在<persons>节点下增加一个新的<person>节点
Element person = document.createElement("person");
Element name = document.createElement("name"); //创建子节点
name.setTextContent("Petter");
Element age = document.createElement("age");
age.setTextContent("20");
Element home = document.createElement("home");
home.setTextContent("ShengZhen");
person.appendChild(name); //添加子节点
person.appendChild(age);
person.appendChild(home);
persons.appendChild(person);
//在<persons>节点下删除<name>="assad"的<perosn>节点;
NodeList personList = persons.getElementsByTagName("person");
for(int i=0;i<personList.getLength();i++){
Element person_i = (Element)personList.item(i);
Element name_i = (Element)person_i.getElementsByTagName("name").item(0);
if(name_i.getFirstChild().getNodeValue().equals("Assad")){
persons.removeChild(person_i); //通过该节点的父节点删除子节点的方式删除该子节点;
break;
}
}
//保存至文件
TransformerFactory factory_t = TransformerFactory.newInstance();
Transformer former = factory_t.newTransformer();
former.setOutputProperty(OutputKeys.INDENT,"yes"); //设置输出时XML换行;
former.transform(new DOMSource(document),new StreamResult(new File("test_update.xml")));
}catch(Exception ex){
ex.printStackTrace();
}
}
3、创建XML对象并保存
public static void create(){
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
//创建节点树
Element bookstore = doc.createElement("bookstore"); //创建根节点
Element book = doc.createElement("book"); //创建其他节点
Element title = doc.createElement("title");
title.setTextContent("How to Learn Java");
Element author = doc.createElement("author");
author.setTextContent("Json");
book.appendChild(title);
book.appendChild(author);
bookstore.appendChild(book);
doc.appendChild(bookstore);
//保存
TransformerFactory factory_t = TransformerFactory.newInstance();
Transformer former = factory_t.newTransformer();
former.setOutputProperty(OutputKeys.INDENT,"yes");
former.transform(new DOMSource(doc),new StreamResult(new File("test_create.xml")));
}catch(Exception ex){
ex.printStackTrace();
}
}