您的位置:首页 > 其它

浅谈XML 解析技术(二) Dom 解析

2015-10-29 16:15 399 查看
【1. students_dom.xml】

<?xml version="1.0" encoding="UTF-8"?>

<Students>
<!--这是第1个Student 元素-->
<Student grade="2" index="1">
<Name>zong_0</Name>
<Age>20</Age>
<Sex>boy</Sex>
<Address>beijing No.0</Address>
<Number>1000</Number>
</Student>
<!--这是第2个Student 元素-->
<Student grade="1" index="2">
<Name>zong_1</Name>
<Age>21</Age>
<Sex>girl</Sex>
<Address>beijing No.1</Address>
<Number>1001</Number>
</Student>
<!--这是第3个Student 元素-->
<Student grade="2" index="3">
<Name>zong_2</Name>
<Age>22</Age>
<Sex>boy</Sex>
<Address>beijing No.2</Address>
<Number>1002</Number>
</Student>
<!--这是第4个Student 元素-->
<Student grade="1" index="4">
<Name>zong_3</Name>
<Age>23</Age>
<Sex>girl</Sex>
<Address>beijing No.3</Address>
<Number>1003</Number>
</Student>
<!--这是第5个Student 元素-->
<Student grade="2" index="5">
<Name>zong_4</Name>
<Age>24</Age>
<Sex>boy</Sex>
<Address>beijing No.4</Address>
<Number>1004</Number>
</Student>
<!--这是第6个Student 元素-->
<Student grade="1" index="6">
<Name>zong_5</Name>
<Age>25</Age>
<Sex>girl</Sex>
<Address>beijing No.5</Address>
<Number>1005</Number>
</Student>
<!--这是第7个Student 元素-->
<Student grade="2" index="7">
<Name>zong_6</Name>
<Age>26</Age>
<Sex>boy</Sex>
<Address>beijing No.6</Address>
<Number>1006</Number>
</Student>
<!--这是第8个Student 元素-->
<Student grade="1" index="8">
<Name>zong_7</Name>
<Age>27</Age>
<Sex>girl</Sex>
<Address>beijing No.7</Address>
<Number>1007</Number>
</Student>
<!--这是第9个Student 元素-->
<Student grade="2" index="9">
<Name>zong_8</Name>
<Age>28</Age>
<Sex>boy</Sex>
<Address>beijing No.8</Address>
<Number>1008</Number>
</Student>
<!--这是第10个Student 元素-->
<Student grade="1" index="10">
<Name>zong_9</Name>
<Age>29</Age>
<Sex>girl</Sex>
<Address>beijing No.9</Address>
<Number>1009</Number>
</Student>
</Students>


【2. DomParseXML.java】

package org.zgf.xml.dom;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.zgf.model.Student;

/**
* @Description: 使用Dom 解析xml
* @author zonggf
* @date 2015年10月29日-下午3:43:11
*/
public class DomParseXML {

private static String fileName = "xml/students_dom.xml";

/** 获取第一个元素的内容 */
private static String getFirstNodeNameValue(NodeList nodeList) {
if (null == nodeList || nodeList.getLength() == 0) {
return null;
}
Element element = (Element) nodeList.item(0);
if (null == element.getFirstChild()) {
return null;
}
return element.getFirstChild().getNodeValue();
}

@Test
public void test_readXML() throws Exception {
List<Student> studentList = new ArrayList<>();

// 1. 获取DocumentBuilder 工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

// 2. 获取DocumentBuilder 对象
DocumentBuilder db = dbf.newDocumentBuilder();

// 3. 获取Document对象
Document document = db.parse(new File(fileName));

// 4. 获取根节点
Element rootElement = document.getDocumentElement();
System.out.println("根节点:" + rootElement.getNodeName());

// 5. 获取节点列表
NodeList studentNodeList = rootElement.getElementsByTagName("Student");
for (int i = 0; i < studentNodeList.getLength(); i++) {
Element studentElement = (Element) studentNodeList.item(i);

// 根据属性名称获取属性值
String gradeAttribute = studentElement.getAttribute("grade");
String index = studentElement.getAttribute("index");

// 获取子节点元素
NodeList nameElements = studentElement.getElementsByTagName("Name");
NodeList numberElements = studentElement.getElementsByTagName("Number");
NodeList ageElements = studentElement.getElementsByTagName("Age");
NodeList sexElements = studentElement.getElementsByTagName("Sex");
NodeList addressElements = studentElement.getElementsByTagName("Address");

// 封装对象
Student student = new Student();
student.setName(getFirstNodeNameValue(nameElements));
student.setNumber(getFirstNodeNameValue(numberElements));
student.setAge(getFirstNodeNameValue(ageElements));
student.setSex(getFirstNodeNameValue(sexElements));
student.setAddress(getFirstNodeNameValue(addressElements));
student.setGrade(gradeAttribute);
studentList.add(student);
}

// 输出对象
for (Student student : studentList) {
System.out.println(student);
}
}

@Test
public void test_creatXMLFile() throws Exception {

}

}


【注:源代码下载
D_parse_xml.zip】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: