关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析。假如有如下xml:

dom4j解析xml其实很简单,只要你有点java基础,知道xml文件。结合下面的xml文件和java代码,多看几遍(代码很简单,不要嫌看代码烦),把他解析的过程看明白,就会很简单

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name type="String">aaa</name>
<age type="int">22</age>
</student>
<student>
<name type="String">bbb</name>
<age type="int">23</age>
</student>
<student>
<name type="String">ccc</name>
<age type="int">21</age>
</student>
</students>

加入我们解析上面这个xml文件,无非是想得到其中的 name值,age值,有时候还需要type值

使用到的类有:org.dom4j.io.SAXReader;
           --read  提供多种读取xml文件的方式,返回一个Domcument对象
       org.dom4j.Document;
          --iterator  使用此法获取node
           --getRootElement  获取根节点   
       org.dom4j.Attribute;  
          --getName  获取属性名
          --getValue  获取属性值  
                    org.dom4j.Element;  
          --attributes  返回该元素的属性列表
           --attributeValue  根据传入的属性名获取属性值
          --elementIterator  返回包含子元素的迭代器
          --elements  返回包含子元素的列表

  下面看一下java代码

public static void domxml() throws Exception {
// SAXReader就是一个管道,用一个流的方式,把xml文件读出来
SAXReader reader = new SAXReader();
// read 提供多种读取xml文件的方式,返回一个Domcument对象
Document document = reader.read(new File("F:" + File.separator + "student.xml"));
// 获取根节点
Element rootElement = document.getRootElement();
System.out.println("根的名称:" + rootElement.getName());// 拿到根节点的名称 Iterator iter = rootElement.elementIterator(); // 获取根节点下的子节点 while (iter.hasNext()) {
StringBuffer sb = new StringBuffer("");
// 子节点
Element nodeElement = (Element) iter.next();
// System.out.println("-根下第一层节点名称:"+nodeElement.getName()+",值"+nodeElement.getText());
sb.append("" + nodeElement.getName() + ":");
// 节点属性
Iterator i = nodeElement.elementIterator();
while (i.hasNext()) {
Element e = (Element) i.next();
// System.out.println("--根下第二层节点名称:"+e.getName()+",节点值:"+e.getText());
sb.append(e.getName() + "-" + e.getText() + ";");
//遍历节点属性值
List<Attribute> attr=e.attributes();
for(Attribute a:attr){
System.out.println("---节点属性:"+a.getName()+",属性值"+a.getText());
}
}
System.out.println(sb);
sb = null;
} }

如果你看明白了上面的代码,看懂了,你肯定会绝得这里嵌套了两个while,加入有三层的话,是不是得写三个while?

不知道你看我上面的代码后有什么想法?反正我弄明白之后,立马就想到了改用递归写这个解析的方法,于是代码如下:

    public static void dgXml(Element element) {
if (element.nodeCount() > 0) {// 还有子节点
Iterator<?> it = element.elementIterator();
while (it.hasNext()) {
Element e = (Element) it.next();
String name = e.getName();
String value = e.getTextTrim().equals("")? "空": e.getTextTrim();
System.out.print(name + "," + value+ ";Data["); if(e.attributeCount()>0){
Iterator<?> ait=e.attributeIterator();
while(ait.hasNext()){
Attribute attribute = (Attribute) ait.next();
System.out.print(attribute.getName()+"|"+attribute.getText()+";");
}
}
System.out.println("]");
dgXml(e);
}
} }

java使用dom4j解析xml文件的更多相关文章

  1. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  2. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  3. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  4. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  5. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  6. 使用dom4j 解析xml文件

    //使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点 package com.offcn.utils; import java.io.File; import java.i ...

  7. dom4j 解析XML文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- 手机的根节点 --> <Phones> ...

  8. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  9. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

随机推荐

  1. hnoi 2016 省选总结

    感觉省选好难的说...反正我数据结构太垃圾正解想到了也打不出来打一打暴力就滚粗了! DAY1 0+20+30 DAY2 60-20+0+60 最后170-20分,暴力分还是没有拿全! 然而这次是给了5 ...

  2. Mac : 强大的截图

    来源:http://irising.me/2011/11/12135/ Mac的截图功能扩展功能很强大的,不要用QQ那个COM+Ctrl+A弱爆了的截图了~ 首先说一下两种截图1.Command+sh ...

  3. 自定义CSS博客(转)

    摘自:http://www.cnblogs.com/libaoheng/archive/2012/03/19/2406836.html 前  言 一个好的阅读体验,对技术博客来说,也许算是锦上添花.入 ...

  4. svn使用(服务器端和客户端)

    http://www.cnblogs.com/tugenhua0707/p/3969558.html 网址如上. 很详细.

  5. 表单美化-原生javascript和jQuery多选按钮(兼容IE6)

    前些天我们讲了下单选按钮的美化今天来做表单元素多选按钮的美化.我们的想法是:利用多选按钮是否被选中和是否不给选择的特性来为按钮的父元素添加对应的样式,就是说用什么的样式是由按钮的状态来决定. 用到的图 ...

  6. mysql概要(十四)索引(补充:外键级联操作)

    [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ][ ON UPDATE { NO ACTION | CASCADE | SE ...

  7. [转载] Linux 文件系统结构介绍

    原文: https://linux.cn/article-6132-weibo.html Linux中的文件是什么?它的文件系统又是什么?那些配置文件又在哪里?我下载好的程序保存在哪里了?在 Linu ...

  8. 百度之星复赛Astar Round3

    拍照 树状数组(SB了).求出静止状态下,每个点能看到多少个向右开的船c1[i],多少个向左开的船c2[i]. max{c1[i] + c2[j], (满足i <= j)  }即为答案.从后往前 ...

  9. 使用Nexus搭建Maven私服

    1.    环境搭建 1.1  下载 http://www.sonatype.org/nexus/ NEXUS OSS [OSS = Open Source Software,开源软件--免费] NE ...

  10. linux之稀疏文件

    1. Sparse 文件是并不占用磁盘存储空间. 2. rm 某文件后, 文件占用的磁盘空间并不是立即释放, 而是其句柄没有被任意一个进程引用时才回收. 3. ls 的结果是 apparent siz ...