xml这种文件格式在很多时候都是很适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比较重要了。在dom中是把每一个元素都看做是一个节点Node的,所有页面上的属性、元素等都是继承自Node的,所以当获取到的是一个Node,而你知道它实际的类型并需要使用的时候就可能会需要进行类型转换了。
Element root = document.getDocumentElement();//获取根节点
下面是代码:
生成xml:
-
public void geneXmlByDom() throws Exception {
-
-
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-
-
DocumentBuilder db = factory.newDocumentBuilder();
-
-
Document document = db.newDocument();
-
-
Element rootElement = document.createElement("Persons");
-
for (int i=0;i<5;i++) {
-
-
Element person = document.createElement("person");
-
-
person.setAttribute("id", "id_"+i);
-
Element name = document.createElement("name");
-
-
name.setTextContent("name_"+i);
-
Element address = document.createElement("address");
-
address.setTextContent("address_"+i);
-
Element email = document.createElement("email");
-
email.setTextContent("email_"+i);
-
person.appendChild(name);
-
person.appendChild(address);
-
person.appendChild(email);
-
-
rootElement.appendChild(person);
-
}
-
-
document.appendChild(rootElement);
-
-
TransformerFactory transformerFactory = TransformerFactory.newInstance();
-
-
Transformer transformer = transformerFactory.newTransformer();
-
-
Source xmlSource = new DOMSource(document);
-
-
Result outputTarget = new StreamResult(new File("persons.xml"));
-
-
transformer.transform(xmlSource, outputTarget);
-
}
生成的xml文件是这个样子
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-
<Persons>
-
<person id="id_0">
-
<name>name_0</name>
-
<address>address_0</address>
-
<email>email_0</email>
-
</person>
-
<person id="id_1">
-
<name>name_1</name>
-
<address>address_1</address>
-
<email>email_1</email>
-
</person>
-
<person id="id_2">
-
<name>name_2</name>
-
<address>address_2</address>
-
<email>email_2</email>
-
</person>
-
<person id="id_3">
-
<name>name_3</name>
-
<address>address_3</address>
-
<email>email_3</email>
-
</person>
-
<person id="id_4">
-
<name>name_4</name>
-
<address>address_4</address>
-
<email>email_4</email>
-
</person>
-
</Persons>
在进行输出写到文件的时候可以设置一些Transformer输出的参数,如xml的编码,或者输出形式等。
-
transformer.setOutputProperty("encoding", "UTF-8");
-
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
下面的解析也是基于这个文件的。
解析xml:
-
public void parseXmlByDom() throws Exception {
-
-
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-
-
DocumentBuilder db = factory.newDocumentBuilder();
-
-
Document document = db.parse("persons.xml");
-
-
NodeList nodeList = document.getElementsByTagName("person");
-
for (int i=0;i<nodeList.getLength();i++) {
-
-
Element person = (Element)nodeList.item(i);
-
-
String id = person.getAttribute("id");
-
-
-
-
String name = person.getElementsByTagName("name").item(0).getTextContent();
-
String address = person.getElementsByTagName("address").item(0).getTextContent();
-
String email = person.getElementsByTagName("email").item(0).getTextContent();
-
System.out.println(" id = "+id+" \r\n name = "+name+" \r\n address = "+address+" \r\n email = "+email);
-
System.out.println("-------------------------------------");
-
}
-
-
}
解析后输出的结果:
-
id = id_0
-
name = name_0
-
address = address_0
-
email = email_0
-
-------------------------------------
-
id = id_1
-
name = name_1
-
address = address_1
-
email = email_1
-
-------------------------------------
-
id = id_2
-
name = name_2
-
address = address_2
-
email = email_2
-
-------------------------------------
-
id = id_3
-
name = name_3
-
address = address_3
-
email = email_3
-
-------------------------------------
-
id = id_4
-
name = name_4
-
address = address_4
-
email = email_4
-
-------------------------------------
Dom生成Xml和解析Xml
原文:http://blog.csdn.net/elim168/article/details/40614649