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. [Django笔记] 从已有的数据库构建应用

    Django适合从零开始构建,所谓 'Green-field' 开发.那么当我需要基于已存在的数据库构建应用时怎么办呢? inspectdb # 扫描默认数据库 python manage.py in ...

  2. 51nod1445(最短路)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1445 题意: 中文题诶~ 思路: 可以将每种颜色看作一个节点 ...

  3. P4718 【模板】Pollard-Rho算法

    题面 传送门 题解 题解 太神仙了学不来orz //minamoto #include<bits/stdc++.h> #define R register #define ll long ...

  4. JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论

    假设待处理的字符串是  xfooxxxxxxfoo 模式.*foo (贪婪模式): 模式分为子模式p1(.*)和子模式p2(foo)两个部分. 其中p1中的量词匹配方式使用默认方式(贪婪型). 匹配开 ...

  5. dedecms有缩略图则显示缩略图,没有则显示随机缩略图

    随着html5以及扁平化等新的设计概念的深入人心,缩略图功能则成了一般网页模版制作不可或缺的一个功能,dedecms默认的的缩略图调用标签[field:imglink/] 或者 [field:litp ...

  6. 老男孩Day7作业:选课系统

    1.作业需求:角色:学校.学员.课程.讲师 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包 ...

  7. luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛

    link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...

  8. 洛谷P3507 [POI2010]GRA-The Minima Game

    题目描述 Alice and Bob learned the minima game, which they like very much, recently. The rules of the ga ...

  9. Django---队列

    1.队列介绍 任务队列用作跨线程或机器分配工作的机制. 任务队列的输入是称为任务的工作单元. 专用工作进程不断监视任务队列以执行新工作. Celery通过消息进行通信,通常使用经纪人(brokers) ...

  10. POJ1051 P,MTHBGWB

    题目来源:http://poj.org/problem?id=1051 题目大意: Morse密码里每个字母用长度不定的点和线来表示,一条信息中字母的编码之间用空隙隔开.下表为Morse密码的编码表: ...