这两天光折腾xml的操作了。因为xml已知,所以觉得多套几个for就完了,可昨天晚上脑袋被套住出不来了。有时候实在没思路的时候,睡觉或许是个比较好的选择,今天一下茅塞顿开,还是写了个迭代,虽然现在仍然不能领会迭代的精髓,但还是想先和大家分享成果。代码如下:
依然用的是dom4j
XmlTree.java
package com.dianzi.test;
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class XmlTree {
/**
* @param args
*/
public static void main(String[] args) {
File file = new File("./src/com/dianzi/test/Log-Sample01.xml");
SAXReader saxReader = new SAXReader();
saxReader.setValidation(false);// 不验证xml文件内的dtd
try {
Document doc = saxReader.read(file);
System.out.println(doc);
XmlTree xml = new XmlTree();
xml.printXMLTree(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
public void printXMLTree(Document doc) {
Element root = doc.getRootElement();
List arr = new ArrayList();
List result = printElement(root, 1, arr);// 根节点深度为1
return;
}
/**
* 遍历标签元素的迭代方法
*
* @param element
* 标签元素
* @param level
* 元素深度
* @param resultList
* 遍历的结果
* @return 返回resultList
*/
@SuppressWarnings("unchecked")
private List printElement(Element element, Integer level, List resultList) {
/**
* 每一个tempList包含四个元素
*
* @get(0):记录元素名称,即打印B的A
* @get(1):打印该标签的值,即打印B的B
* @get(2):元素深度
* @get(3):元素的属性及对应值列表,即B=》attrObjList.get(0)存c
* =》attrObjList.get(1)存d
*/
List tempList = new ArrayList(4);
tempList.add(element.getQualifiedName());// 记录元素名称,即打印B的A
tempList.add(element.getText());// 打印该标签的值,即打印B的B
// 打印标签值不能放在下面的if中,可能第二层就有值,如B
tempList.add(level);// 元素深度;
Iterator eleAttriItor = element.attributeIterator();
if (eleAttriItor.hasNext()) {// 元素有参数的,遍历参数的个数
List attrObjList = new ArrayList(element.attributes().size());
while (eleAttriItor.hasNext()) {
Attribute eleAttr = (Attribute) eleAttriItor.next();
List attrObj = new ArrayList(2);
attrObj.add(eleAttr.getName());
attrObj.add(eleAttr.getValue());
attrObjList.add(attrObj);
}
tempList.add(attrObjList);
} else {
// 没参数的
}
resultList.add(tempList);
// 迭代
for (Iterator iter = element.elementIterator(); iter.hasNext();) {
Element sub = (Element) iter.next();
printElement(sub, level+1, resultList);//深度加一
}
return resultList;
}
}
Log-Sample01.xml
男,1982年生,硕士,现就读于北京邮电大学
cwb
PC学院
62358888
男,1987年生,硕士,现就读于中国农业大学
xxxxx
xxx学院
66666666
注视中,注释中
lxx
yyyy学院
88888888
注视中111,注释中222
分享到:
2009-06-09 14:05
浏览 1106
评论