package lianxi;

import java.util.Iterator;
import java.util.List;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dome4j {

private static Document docu=null;
public static void main(String[] args) throws Exception {

read();
list(docu.getRootElement());//得到根元素
//select(docu);
//add(docu);
//update(docu);
//delete(docu);

}

private static void delete(Document docu2) throws Exception {
//删除第一个属性
Element stu=docu.getRootElement().element("学生");
stu.getParent().remove(stu);
save();
//删除元素
/*Element stu1=docu.getRootElement().element("学生").element("名字");
stu1.remove(stu1);*/
}

private static void update(Document docu) throws Exception {
//先遍历出所有的学生姓名
Element stus=(Element)docu.getRootElement().elements("学生").get(0);//elements表示取出所有元素
Element name=stus.element("名字");
name.setText("李逵");
save();

}

private static void save() throws Exception {
OutputFormat output=OutputFormat.createPrettyPrint();//指定输出格式
output.setEncoding("utf-8");
//勇Writer跟新
XMLWriter wr=new XMLWriter(new FileOutputStream(new File("src/na.xml")),output);//起到美化作用
wr.write(docu);
wr.close();
}

private static void add(Document docu) throws Exception {
//首先建立一个学生节点

Element newstu=DocumentHelper.createElement("学生");//DocumentHelper.createElement添加节点
Element newstu_name=DocumentHelper.createElement("名字");
newstu_name.setText("刘春勇");
Element newstu_age=DocumentHelper.createElement("年龄");
newstu_age.setText("23");
Element newstu_txt=DocumentHelper.createElement("介绍");
newstu_txt.setText("超级无敌的猛人");
newstu.add(newstu_name);//将子节点添加到上一个节点中
newstu.add(newstu_age);
newstu.add(newstu_txt);
docu.getRootElement().add(newstu);//将所有节点添加到根节点中
save();
}
//查询某个学生的信息
private static void select(Document docu) {

/* root.elements("学生"):表示取出root元素下所有的学生元素
* root.element("学生"): 表示取出root元素下第一个学生元素
* root.elements("学生").get(0): 表示取出root元素下第一个学生元素
* attributeValue:值得为属性值
*
* */
//1.首先要得到根元素
Element root=docu.getRootElement();
Element stu=(Element)root.elements("学生").get(0);//返回的是node需要转化
//继续寻找元素下的名字
Element stu_name=stu.element("名字");
System.out.println(stu_name.getName()+"----"+stu_name.getText());
Element stu_age=stu.element("年龄");
System.out.println(stu_age.getName()+"----"+stu_age.getText());
Element stu_txt=stu.element("介绍");
System.out.println(stu_txt.getName()+"----"+stu_txt.getText());

}
private static void read() throws Exception{
//通过解析器去解析xml
SAXReader saxread=new SAXReader();
docu=saxread.read("src/na.xml");//Document
}
private static void list(Element element){
//遍历xml文件
System.out.println(element.getName()+element.getTextTrim());//去除空格
//获取子元素
Iterator iter=element.elementIterator();//Iterator来遍历节点
while(iter.hasNext()){
//查找其下面是否还有其他的子元素
Element e=(Element)iter.next();
list(e);
}

}
}

xmlDemo4j解析的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  3. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  6. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  7. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  8. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  9. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

随机推荐

  1. 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

    如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...

  2. windows安装redis并设置别名

    最近两天不知什么原因导致win10的redis 无法通过 双击 redis-server.exe 文件启动 redis服务:于是从新安装并且 通过命令行启动服务,并且设置别名,每次方便启动服务 1.下 ...

  3. java:数据结构复习(三)链表队列

    @TOC 和栈一样,队列也是表,但是使用队列的特点是先进先出. 队列模型 队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素 graph LR A[<kbd&g ...

  4. pytorch 检测图片中是否有人

    照搬pytorch官方代码,只是将数据集换成了INRIAPerson数据集中的train和test文件夹. 贴下代码和效果,代码是官方的,就不详细解释了. # License: BSD # Autho ...

  5. [Groovy]转:Groovy 通过 isCase 方法进行分类

    闭包实现了 isCase 方法,这样闭包可以在 grep 和 sw itch 中作为分类器使用,在这种情况下,各自的参数传递给闭包,然后调用闭包进行计算得到一个 Boo lean 值(参考 6.1 节 ...

  6. Canvas制作动态进度加载水球

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Til the Cows Come Home (dijkstra算法)

    Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before ...

  8. 基于APPIUM测试微信公众号的UI自动化测试框架(结合Allure2测试报告框架)

    框架初衷 前两周组内的小伙伴跟我说她现在测试的微信公众号项目(保险)每次上新产品时测试起来很费时,存在大量的重复操作(点点点),手工测试每个产品可能需要半天到一天的时间,复杂的产品需要两天. 由于保险 ...

  9. 内置函数_eval

    eval功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source[, globals[, locals]]) -> value 参数说明: expression ...

  10. java——编译和运行

    Java源代码---->编译器---->Java字节码(即虚拟指令..class文件.特殊的二进制文件.二进制字节码文件)---->jvm---->解释器(jvm的一部分)-- ...