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. ASPxGridView KeyFieldName

    KeyFieldName="查询表的主键名称"

  2. loj #6250. 「CodePlus 2017 11 月赛」找爸爸

    #6250. 「CodePlus 2017 11 月赛」找爸爸 题目描述 小 A 最近一直在找自己的爸爸,用什么办法呢,就是 DNA 比对. 小 A 有一套自己的 DNA 序列比较方法,其最终目标是最 ...

  3. P2253 好一个一中腰鼓!

    题意:给你一个序列,初始是0,每次一个操作,把一个数^=1 每次求出最长01串的长度 正解:线段树(虽然暴力能过) 对于每个区间,记录三个值 lmax,以l为首的01串长度 rmax,以r为尾的01串 ...

  4. 模板 Trie树

    模板 Trie树 code: #include <iostream> #include <cstdio> using namespace std; const int wx=2 ...

  5. 13.Convert BST to Greater Tree(将树转为更大树)

    Level:   Easy 题目描述: Given a Binary Search Tree (BST), convert it to a Greater Tree such that every k ...

  6. centos7上面关闭防火墙

    CentOS 7.0默认使用的是firewall作为防火墙:若没有启用iptables 作为防火墙,则使用以下方式关闭防火墙: systemctl stop firewalld.service 关闭开 ...

  7. google ---gson字符串数组用GSON解析然后用逗号隔开拼接,去掉最后一个逗号

    public static void main(String[] args) { String ss= "[{\"type\":\"0\",\&quo ...

  8. 批处理中setlocal enabledelayedexpansion的含义

    setlocal enabledelayedexpansion       延迟变量全称"延迟环境变量扩展",要理解这个东西,我们还得先理解一下什么叫扩展!       CMD在解 ...

  9. Go语言基础之20--web编程框架之Gin框架

    一.Gin框架介绍 1.1 简介 A. 基于httprouter开发的web框架. http://github.com/julienschmidt/httprouter B. 提供Martini风格的 ...

  10. Spring里的Ant Pattern

    Spring里的Ant Pattern用于匹配URL 可以参考官网:https://docs.spring.io/spring/docs/current/javadoc-api/org/springf ...