遍历xml删选_遍历XML 分享修改删除

这两天光折腾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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-06-09 14:05

浏览 1106

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值