这两天光折腾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):记录元素名称,即打印<A>B</A>的A
* @get(1):打印该标签的值,即打印<A>B</A>的B
* @get(2):元素深度
* @get(3):元素的属性及对应值列表,即<A c=“d” >B</A>=》attrObjList.get(0)存c
* =》attrObjList.get(1)存d
*/
List tempList = new ArrayList(4);
tempList.add(element.getQualifiedName());// 记录元素名称,即打印<A>B</A>的A
tempList.add(element.getText());// 打印该标签的值,即打印<A>B</A>的B
// 打印标签值不能放在下面的if中,可能第二层就有值,如<root><A>B</A></root>
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
<?xml version="1.0" encoding="gb2312"?>
<students>
<student age="25" leader="学院领导"><!--如果没有age属性,默认的为20-->
男,1982年生,硕士,现就读于北京邮电大学
</student>
<student>
<name>cwb</name>
<college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->
<telephone>62358888</telephone>
<notes>男,1987年生,硕士,现就读于中国农业大学</notes>
</student>
<student age="45">
<name>xxxxx</name>
<college leader="">xxx学院</college>
<telephone>66666666</telephone>
<notes>注视中,注释中</notes>
</student>
<student age="">
<name>lxx</name>
<college>yyyy学院</college>
<telephone>88888888</telephone>
<notes>注视中111,注释中222</notes>
</student>
</students>
分享到:
相关推荐
C#对XML文件进行增删查改,并提供了遍历XMl文件信息的方法包括1.生成xml文件、2.遍历xml文件的节点信息、3.修改xml文件的节点信息、4.向xml文件添加节点信息...删除指定xml文件的节点信息、6、嵌套循环遍历xml信息节点
基于tinyxml2封装的库,成功遍历xml文件所有节点,提供删除节点,添加节点,更改节点的值,读取节点的值,搜索指定节点,获取xml文件路径函数,提供库的源代码和调用库的例程,有疑问可留言交流。
利用CMakup类实现对XML解析,实现遍历,添加,修改,删除的简单例子
换句话说:XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。 模块简介: 1、XMLDOMDocument类: XML对象文档 ->操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的...
3,动态增加、删除属性,遍历、读取属性名称以及值 背景: tinyxml对xml操作的接口过于分散,为了适应自己的需要,对常用的接口进行简单的封 装,各个接口增加注释,方便使用。 环境: WinXP+VC6
遍历浏览XML数据信息 动态读取XML文件并显示 动态删除XML数据节点 动态生成XML文件并浏览 动态修改XML数据节点 动态增加XML数据节点 将XML文件中数据绑定到TreeView控件 用asp.net和xml写得新闻更新系统
xml解析的遍历,增加,删除,修改。。。。。。多种实现 多种实现 多种实现
树形控件的每个节点映射到XML,双击树节点显示其值或属性值,增加、删除、修改树节点的同时修改xml中相对应节点!其中的大部分算法都采用递归,希望对你有所帮助!
XML+DOM+解析和生成+教程 - 本资源是一个XML的教程,教你如何用Java的DOM技术解析和生成XML文档,包括创建和遍历节点,修改和删除属性,添加和删除元素等。
其中包含了xml文件的创建,节点内容修改,添加删除子节点,返回指定节点的所有子节点内容,某节点包含的节点数等。 窗体动画开启,动画关闭--比较简单,仅仅是展示调用系统链接库的一个思路而已。
3,动态增加、删除属性,遍历、读取属性名称以及值 背景: tinyxml对xml操作的接口过于分散,为了适应自己的需要,对常用的接口进行简单的封 装,各个接口增加注释,方便使用。 环境: WinXP+VC6
IBATIS开发包使用实例使用出错 ①插入操作时会报SQL错误,原因如下 com.mydomain.data.Account.xml文件的insert部分ACC_EMIAL的后面没有括号,加上即可解决这个问题。...经过修改后的ibatis开发实例,使用mysql数据库
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
分步学习php操作xml:XML概念、DOMDocument对象、加载xml、读取/遍历节点与属性、修改属性/节点、添加元素/属性、删除属性/节点,学会上面这些就可以顺利操作XML了。
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...
javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...