目前配置文件在项目开发中非常常见,想properties,xml,json, ini 等等,今天我们来简单介绍一下怎么解析XML。 解析XML有很多种方法,其中可以分为两大类,一个是DOM,另一个是SAX。
<?xml version=”1.0″?>
<employees>
<employee>
<name>leon</name>
<sex>m</sex>
<age>24</age>
</employee>
</employees>
下面是Java Code
package com.trend;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Xmlfile { //解析XML
public void paraseXml(File filename){
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //得到Document解析工厂实例
try {
DocumentBuilder builder=factory.newDocumentBuilder(); //创建DOM解析器
Document doc=builder.parse(filename);
NodeList n=doc.getElementsByTagName("employee");
for(int i=0;i<n.getLength();i++){
System.out.println("Names is "+doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue());
System.out.println("Age is "+doc.getElementsByTagName("age").item(i).getFirstChild().getNodeValue());
System.out.println("Sex is "+doc.getElementsByTagName("sex").item(i).getFirstChild().getNodeValue());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void appendNode(File filename){ //添加节点
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder=factory.newDocumentBuilder();
try {
Document doc=builder.parse(filename);
//this.document = builder.newDocument();
Element root= (Element)doc.getElementsByTagName("employees").item(0); //获取根节点
// System.out.println(root.get);
Element employee=doc.createElement("employee"); //创建employee节点
Element name = doc.createElement("name"); //创建name
name.appendChild(doc.createTextNode("Li"));
employee.appendChild(name);
Element age=doc.createElement("age"); //创建age
age.appendChild(doc.createTextNode("25"));
employee.appendChild(age);
Element sex =doc.createElement("sex"); //创建sex
sex.appendChild(doc.createTextNode("w"));
employee.appendChild(sex);
root.appendChild(employee); //添加employee
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer;
try {
transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(filename);
try {
transformer.transform(source, result);
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
下面是测试类:
package com.trend;
import java.io.File;
public class paraseXml {
public static void main(String[] args) {
File file =new File("E:\\123.xml");
Xmlfile xml = new Xmlfile();
xml.paraseXml(file); //解析
xml.appendNode(file); //添加
xml.paraseXml(file); //添加后再次解析
}
}