Dom4j 综合考虑来说是最佳操作XML的生成与解析的方式
下面直接放代码:
package xmlparse;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
import java.util.Iterator;
import java.util.List;
/**
* Created by Administrator on 2019/6/17 0017 下午 11:01
*/
public class Dom4jTest {
/**
* Dom4j 生成XML
*
*/
public void CreateXml(){
//1.创建document对象
Document document = DocumentHelper.createDocument();
//2创建根节点bookstore
Element bookstore = document.addElement("bookstore");
//3.创建根节点下子节点book
Element book = bookstore.addElement("book");
//4创建根节点属性
book.addAttribute("id", "1");
//5.创建book下子节点name.athor等子节点
Element name = book.addElement("name");
//6.设置name的文本值
name.setText("小王子");
Element author = book.addElement("author");
author.setText("安东尼");
Element price = book.addElement("price");
price.setText("68");
Element language = book.addElement("Language");
language.setText("Chinese");
Element description = book.addElement("description");
description.setText("<这是一本我没看过的书>");
//7创建输出格式对象Format,用于格式化xml
OutputFormat format = OutputFormat.createPrettyPrint();
//8使用OutputFormat格式化编码
format.setEncoding("GBK");
//7.将document转换成xml
try {
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/res/cwbook.xml"),format);
//设置特殊字符不用转义
// xmlWriter.setEscapeText(false);
xmlWriter.write(document);
xmlWriter.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Dom4j解析XML
*/
public void XMLParse(){
//1 首先创建SAXReader 解析器
SAXReader saxReader = new SAXReader();
try {
//2.加载需要解析的文件
Document read = saxReader.read(new File("src/res/cwbook.xml"));
//3获取根节点
Element bookstore = read.getRootElement();
//4根据根节点获取其下的所有子节点
Iterator<Element> bookstores = bookstore.elementIterator();
int index=1;
//5.遍历节点
while(bookstores.hasNext()){
System.out.println("开始解析第"+index+"本书");
//6拿到其中一个节点
Element books = bookstores.next();
//7 获取其中一个节点的所有属性
List<Attribute> attributeList = books.attributes();
//8遍历属性节点
for (Attribute arrt:attributeList) {
//9 输出每个属性节点的属性名称和属性值
String arrtName = arrt.getName();
String arrtValue = arrt.getValue();
System.out.println("第"+index+"本书的属性名是:"+arrtName+",属性值是:"+arrtValue);
}
//10获取其中一个节点下的子节点
Iterator<Element> book = books.elementIterator();
//11遍历子节点
while(book.hasNext()){
//12 拿到其中一个子节点并输出节点名称和节点值
Element bookchild = book.next();
System.out.println("节点名是:"+bookchild.getName()+",节点值是:"+bookchild.getStringValue());
}
System.out.println("结束解析第"+index+"本书");
index++;
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
// 简易测试
public static void main(String[] args) {
Dom4jTest dom4jTest = new Dom4jTest();
//生成xml
dom4jTest.CreateXml();
//解析xml
dom4jTest.XMLParse();
}
}