`
dianziermu
  • 浏览: 137678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

遍历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):记录元素名称,即打印<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文件信息的方法

    C#对XML文件进行增删查改,并提供了遍历XMl文件信息的方法包括1.生成xml文件、2.遍历xml文件的节点信息、3.修改xml文件的节点信息、4.向xml文件添加节点信息...删除指定xml文件的节点信息、6、嵌套循环遍历xml信息节点

    遍历xml文件的动态链接库和调用库的例程(附库源码)

    基于tinyxml2封装的库,成功遍历xml文件所有节点,提供删除节点,添加节点,更改节点的值,读取节点的值,搜索指定节点,获取xml文件路径函数,提供库的源代码和调用库的例程,有疑问可留言交流。

    利用CMakup类实现对XML解析,实现遍历,添加,修改,删除

    利用CMakup类实现对XML解析,实现遍历,添加,修改,删除的简单例子

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    换句话说:XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。 模块简介: 1、XMLDOMDocument类: XML对象文档 -&gt;操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的...

    对tinyxml库封装

    3,动态增加、删除属性,遍历、读取属性名称以及值 背景: tinyxml对xml操作的接口过于分散,为了适应自己的需要,对常用的接口进行简单的封 装,各个接口增加注释,方便使用。 环境: WinXP+VC6

    XML文件处理

    遍历浏览XML数据信息 动态读取XML文件并显示 动态删除XML数据节点 动态生成XML文件并浏览 动态修改XML数据节点 动态增加XML数据节点 将XML文件中数据绑定到TreeView控件 用asp.net和xml写得新闻更新系统

    XML.zip_xml

    xml解析的遍历,增加,删除,修改。。。。。。多种实现 多种实现 多种实现

    vc DOM操作xml,从Tree到Xml,xml到Tree

    树形控件的每个节点映射到XML,双击树节点显示其值或属性值,增加、删除、修改树节点的同时修改xml中相对应节点!其中的大部分算法都采用递归,希望对你有所帮助!

    XML+DOM+解析和生成+教程

    XML+DOM+解析和生成+教程 - 本资源是一个XML的教程,教你如何用Java的DOM技术解析和生成XML文档,包括创建和遍历节点,修改和删除属性,添加和删除元素等。

    XML 读写,修改等操作,动画窗体

    其中包含了xml文件的创建,节点内容修改,添加删除子节点,返回指定节点的所有子节点内容,某节点包含的节点数等。 窗体动画开启,动画关闭--比较简单,仅仅是展示调用系统链接库的一个思路而已。

    对tinyxml库封装的简单类

    3,动态增加、删除属性,遍历、读取属性名称以及值 背景: tinyxml对xml操作的接口过于分散,为了适应自己的需要,对常用的接口进行简单的封 装,各个接口增加注释,方便使用。 环境: WinXP+VC6

    ibatics 官方网站正确实例

    IBATIS开发包使用实例使用出错 ①插入操作时会报SQL错误,原因如下 com.mydomain.data.Account.xml文件的insert部分ACC_EMIAL的后面没有括号,加上即可解决这个问题。...经过修改后的ibatis开发实例,使用mysql数据库

    JAVA_API1.6文档(中文)

    javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...

    php操作xml

    分步学习php操作xml:XML概念、DOMDocument对象、加载xml、读取/遍历节点与属性、修改属性/节点、添加元素/属性、删除属性/节点,学会上面这些就可以顺利操作XML了。

    java api最新7.0

    javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...

    JavaAPI1.6中文chm文档 part1

    javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...

    [Java参考文档]

    javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...

    JavaAPI中文chm文档 part2

    javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...

Global site tag (gtag.js) - Google Analytics