909422229__XML解析之dom4j

这几天一直在学XML的解析方式,下面记录一下一种XML的dom4j,这种方式效率很高,速度很快,话不多说,下面附上源码跟注释,希望给大家带来帮助,也为自己的学习留下一点轨迹,爱生活,爱Java。

还是那句话,多看源码,多打代码就明白了,有的知识不需要理解,用的多了自然就懂了,例如最开始学习的public static void main(String args){}

我相信当初学习java的都不懂,但是只要记住就可以了,我相信现在大家都懂了,哈哈。

有错误的大家踊跃指出,知错能改,善莫大焉。

JAVA文件源码:


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;


import org.dom4j.Attribute;
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;
import org.xml.sax.DocumentHandler;


public class test_02 {
public static void main(String[] args) throws Exception {
// 得到第一个本书的名字
// text1();
// 得到第二本书的书名
// text2();
// 读取属性节点
// text3();
// 修改
// text4();
// 添加新的元素
// text5();
// 第二种添加元素
// text6();
// 删除元素
text7();
}


private static void text7() throws Exception{
// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


Element root = doc.getRootElement();
Element price = root.element("书").element("售价");
price.getParent().remove(price);

/**
* 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器
*/
OutputFormat format = OutputFormat.createPrettyPrint();
// 第一种将文档格式设置成需要的编码,设置的文档
format.setEncoding("UTF8");
// 将内存中的数据写入XML文档中
// FileWriter fileWroter = new FileWriter("src/users.xml");
// 防止乱码。指定编码类型


// 利用XMLWriter对象使文件成功写入XML文件,调用方法
// 参数:关联文件,写入的目标文件 第二个参数:指明输出格式
// 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream("src/NewFile1.xml"), "UTF8"), format);
writer.write(doc);
writer.close();
}


private static void text6() throws Exception {


// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


Element root = doc.getRootElement();
List<Element> lists = root.elements();
Element bookname = DocumentHelper.createElement("bookname");
// 对指定位置添加元素
lists.add(1, bookname);
// 添加属性
// price.addAttribute("price", "40.0");

/**
* 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器
*/
OutputFormat format = OutputFormat.createPrettyPrint();
// 第一种将文档格式设置成需要的编码,设置的文档
format.setEncoding("UTF8");
// 将内存中的数据写入XML文档中
// FileWriter fileWroter = new FileWriter("src/users.xml");
// 防止乱码。指定编码类型


// 利用XMLWriter对象使文件成功写入XML文件,调用方法
// 参数:关联文件,写入的目标文件 第二个参数:指明输出格式
// 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream("src/NewFile1.xml"), "UTF8"), format);
writer.write(doc);
writer.close();
}


// 添加新的元素
private static void text5() throws Exception {
// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


Element root = doc.getRootElement();


List<Element> lists = root.elements();
Element book = lists.get(1);
// 创建属性,创建元素体,创建元素,返回的都是元素对象,直接在下面添加对象即可添加到XML中
Element name = DocumentHelper.createElement("书名").addAttribute("name",
"20");
name.setText("CSS详解");
book.add(name);


// 添加属性
// price.addAttribute("price", "40.0");
// 第二种添加属性
/**
* 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器
*/
OutputFormat format = OutputFormat.createPrettyPrint();
// 第一种将文档格式设置成需要的编码,设置的文档
format.setEncoding("UTF8");
// 将内存中的数据写入XML文档中
// FileWriter fileWroter = new FileWriter("src/users.xml");
// 防止乱码。指定编码类型


// 利用XMLWriter对象使文件成功写入XML文件,调用方法
// 参数:关联文件,写入的目标文件 第二个参数:指明输出格式
// 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream("src/NewFile1.xml"), "UTF8"), format);
writer.write(doc);
writer.close();
}


// 修改第一本书的售价,改成50元
private static void text4() throws Exception {
// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


Element root = doc.getRootElement();
Element price = root.element("书").element("售价");
price.setText("50.0");


// 添加属性
// price.addAttribute("price", "40.0");
// 第二种添加属性
/**
* 写入之后使元素有秩序的排列 createPrettyPrint 良好的格式 OutputFormat 格式化的输出器
*/
OutputFormat format = OutputFormat.createPrettyPrint();
// 第一种将文档格式设置成需要的编码,设置的文档
format.setEncoding("UTF8");
// 将内存中的数据写入XML文档中
// FileWriter fileWroter = new FileWriter("src/users.xml");
// 防止乱码。指定编码类型


// 利用XMLWriter对象使文件成功写入XML文件,调用方法
// 参数:关联文件,写入的目标文件 第二个参数:指明输出格式
// 第二种将代码设置成需要的编码方式,设置自身。利用FileOutputStream指定了文档的编码类型
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream("src/NewFile1.xml"), "UTF8"), format);
writer.write(doc);
writer.close();
}


private static void text3() throws DocumentException {
// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


Element root = doc.getRootElement();
Element bookname = root.element("书").element("书名");


// 第一种:得到元素属性
System.out.println(bookname.attributeValue("isbn"));
// 第二种返回的是属性对象,根据属性对象得到属性的值
Attribute attr = bookname.attribute("price");
System.out.println(attr.getValue());


}


private static void text2() throws Exception {
// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


// 得到根节点
Element root = doc.getRootElement();
// 将所有元素取出来放到迭代器中
// Iterator<Element> iterator = root.elementIterator();
// //遍历迭代器找到
// while(iterator.hasNext()){
// Element element = iterator.next();
// System.out.println(element.element("书名").getText());
// }
// 利用List直接使用元素名称找到节点与元素体
List<Element> lists = root.elements();
System.out.println(lists.get(1).element("书名").getText());
}


private static void text1() throws Exception {
// 找到第一本图书的书名
// 读取磁盘文件的作用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/NewFile1.xml"));


// 先找根节点---》子节点---》子节点
// 找到根节点
Element root = doc.getRootElement();
// System.out.println(root.getNodeType());
// 找子节点
Element book = root.element("书");
// 找到孙子节点,获取孙子节点的元素体
System.out.println(book.element("书名").getText());


}

}

XML文件源码:

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

<书架> 
  <书> 
    <书名 isbn="234-345-1234" price="35">JavaEE</书名>  
    <作者>dhw</作者> 
  </书>  
  <书> 
    <书名 isbn="234-345-1234">Java</书名>  
    <作者>dhw</作者>  
    <售价>39.0</售价>  
    <书名 name="20">CSS详解</书名> 
  </书> 
</书架>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

75888丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值