xml 將解析的檔案裡的值賦給物件,將物件存入集合
阿新 • • 發佈:2019-01-31
在dom解析的基礎上加了很多if語句,不是最優解法.
public class Dom4jaddList {
@Test
public void DompareXml() throws Exception {
File file = new File("src/com/youv/xml/test/students.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
DOMReader reader = new DOMReader();
Document doc = reader.read(builder.parse(file));
// 獲取根節點的元素物件
Element node = doc.getRootElement();
List<Student> liststu = new ArrayList<Student>();
// 建立物件
Student student = new Student();
// 在遍歷的過程中將元素存入物件中,再存入集合中
listnode(node,student,liststu);
// 遍歷集合
iter(liststu);
}
@SuppressWarnings("unchecked")
public void listnode(Element node,Student student,List<Student> liststu) {
// 獲取根元素的名字
// System.out.println("根元素名字是"+node.getName());
// 獲取元素的屬性資訊
List<Attribute> list = node.attributes();
for (Attribute attribute : list) {
String id=attribute.getText();
student.setId(id);
System.out.println(id);
}
// 獲取文字
if (!(node.getTextTrim().equals(""))) {
// 獲取文字資料
String str = node.getName();
String data = (String) node.getData();
if (str.equals("name")) {
student.setName(data);
}
if (str.equals("sex")) {
student.setSex(data);
}
if (str.equals("age")) {
//xml檔案的資料是有順序的,age是一個student標籤的最後一個子標籤.所以在這裡存入集合
int age = Integer.parseInt(data);
student.setAge(age);
liststu.add(student);
}
}
Iterator<Element> it = node.elementIterator();
while (it.hasNext()) {
Element element = it.next();
//在這裡進行判斷,因為是遞迴操作,所以每次迭代都需要將完成一部分的資料重新放入自己的方法
//中.element,student,liststu,需要判斷什麼時候需要建立新的student物件,
if(element.getName().equals("student")){
student=new Student();
listnode(element,student,liststu);
}else{
listnode(element,student,liststu);
}
}
}
public void iter(List<Student> liststu) {
Iterator<Student> it = liststu.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}