这几天一直在学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"),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"),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",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详解</书名> </书> </书架>