//使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点

package com.offcn.utils;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.Iterator;

import org.dom4j.Document; //导这个包dom4j

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

//使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点

public class ShowInfoUtils {

public static void main(String[] args) {

ShowInfoUtils s = new ShowInfoUtils();

s.getDocument();

s.showInfo();

// s.delete();

// s.update();

// s.showWrite("src/new2.xml");

// s.add();

// s.showWrite("src/new4.xml");

// s.showWrite("src/new1.xml");

// s.showInfo();

}

public Document doc;

//加载doc对象

//获得doc对象

public void getDocument(){

try {

SAXReader sr = new SAXReader();

doc=sr.read(new File("src/phone.xml"));

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//删除一个节点

public void delete(){

Element e = doc.getRootElement(); //得到根节点

Iterator iter = e.elementIterator(); //拿到迭代器

//对迭代器进行遍历

while(iter.hasNext()){

Element ele=(Element)iter.next(); //返回的是object,要强转

if(ele.attributeValue("name").equals("三星")){

ele.getParent().remove(ele);

}

}

}

//删除之后 开始写入xml文件中

public void showWrite(String path){

//格式化类,设置编码格式

try {

OutputFormat outputFormat = OutputFormat.createCompactFormat();

outputFormat.setEncoding("utf-8");

//dom4j给我们提供了一个写入的类

XMLWriter xWriter = new XMLWriter(new FileOutputStream(path),outputFormat);

xWriter.write(doc);

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//修改 ,加一个id

public void update(){

//获得根节点

Element e = doc.getRootElement();

Iterator iterator =e.elementIterator();

int num=0;

while(iterator.hasNext()){

Element element = (Element)iterator.next();

num++;

element.setAttributeValue("id", num+"");

}

}

//增加一个Brand

public void add(){

Element e = doc.getRootElement();

// Iterator iter = e.elementIterator();

Element elementBrand = e.addElement("Brand");

elementBrand.setAttributeValue("name", "华为");

Element elementType = elementBrand.addElement("Type");

elementType.setAttributeValue("name", "galax");

e.appendContent(elementBrand);

}

//展示XML信息

public void showInfo(){

//得到根节点,也就是XML里的Phones节点

Element e = doc.getRootElement();

//得到所有的brand对象,然后进行遍历

Iterator iterator = e.elementIterator(); //拿到迭代器

//判断是否有下一个元素

while(iterator.hasNext()){

//拿到具体的元素

Element elementBrand = (Element)iterator.next(); //此时找到了brand标签,

String elementBranValue = elementBrand.attributeValue("name"); //找到name属性对应的值

System.out.println(elementBranValue); //输出三星 苹果

//得到儿子的节点

Iterator elementIterator = elementBrand.elementIterator(); //拿到Brand迭代器

while(elementIterator.hasNext()){

Element ele= (Element)elementIterator.next(); //得到每一个子标签

String s = ele.attributeValue("name");

System.out.println(s);

}

}

}

}

//这是XML文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- 手机的根节点 -->

<Phones>

<Brand name="三星">

<Type name="note4">note4</Type>

<Type name="note5">note5</Type>

</Brand>

<Brand name="苹果">

<Type name="iphone7">iphone7</Type>

<Type name="iphone8">iphone8</Type>

<Type name="iphone9">iphone9</Type>

</Brand>

</Phones>

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

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

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

  2. 用DOM4J解析XML文件案例

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

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

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

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

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

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

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

  6. dom4j 解析XML文件

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

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

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

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

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

  9. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

随机推荐

  1. node.js 使用forever守护进程

    //forever的安装:npm install forever -g//使用forever启动守护进程:forever start 路径/your_app.js//关闭守护进程:forever st ...

  2. ucloud中的udisk错误“Read-only file system”修复指南

    当udisk写入数据提示错误:"Read-only file system",按照下面的方法修复:  1. 停止使用对应udisk的业务 如果有未知的进程正在操作这个硬盘,可使用命 ...

  3. Spring-cloud (九) Hystrix请求合并的使用

    前言: 承接上一篇文章,两文本来可以一起写的,但是发现RestTemplate使用普通的调用返回包装类型会出现一些问题,也正是这个问题,两文没有合成一文,本文篇幅不会太长,会说一下使用和适应的场景. ...

  4. 关于Kafka配额的讨论(1)

    Kafka自0.9.0.0版本引入了配额管理(quota management),旨在broker端对clients发送请求进行限流(throttling).目前Kafka支持两大类配额管理: 网络带 ...

  5. go源文件中是否有main函数

    import (    "go/parser" "go/token"    "go/ast"  )  func HasMain(file s ...

  6. 转载iOS开发中常见的警告及错误

    iOS警告收录及科学快速的消除方法     前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作. ...

  7. linux重置密码的方法和用户切换

    由于好久没有用本地的vmware了,本地虚拟机的密码都忘光了,这个不常遇见的问题碰到了,百度了一下解决了 学习源头:https://www.cnblogs.com/lippor/p/5537931.h ...

  8. #define指令

    #define指令: 使用#define的标准格式: #define PI 3.14159 注意:结尾不加分号(;),也不要写成PI = 3.14159,我们最好用大写表示符号常量/明示常量(PI). ...

  9. 干货!分享一款windows下的磁盘分析神器。

    作为开发人员的你,肯定遇到过这样的情况,120G SSD系统盘居然满载了,到底是被哪些程序占用了,包含哪些大文件,这个时候脑袋里就开始回忆了.....这对平时没有养成规范化记录安装软件好习惯的同学而言 ...

  10. 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章   STM32H7工程模板建立(IAR8) 本章 ...