DOM4J
特点:
开源、易用
应用于Java平台
使用大量接口
Document:定义XML文档
Element:定义XML元素
Text:定义XML文本节点
Attribute:定义了XML 的属性
……
练习02:使用DOM4J解析XML文件
显示手机收藏信息
保存手机收藏信息
为手机收藏信息添加新的节点
修改/删除手机收藏信息节点
收藏文件
<?xml version="1.0" encoding="GBK"?>
<PhoneInfo>
<Brand name="华为">
<Type name="U8650"/>
<Type name="HW123"/>
<Type name="HW321"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone4"/>
</Brand>
<Brand name="三星">
<Type name="Note4"/>
</Brand>
</PhoneInfo>
DOM4J解析文件(显示、保存、添加、修改、删除合一)
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4j {
public static Document doc;
public static void main(String[] args) {
loadDocument();
// showPhoneInfo();
addNewPhoneInfo();
// saveXML("新收藏.xml");
// updatePhoneInfo();
// deleteItem();
showPhoneInfo();
}
public static void loadDocument(){
try{
SAXReader saxReader = new SAXReader();
doc = saxReader.read(new File("新收藏.xml"));
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void updatePhoneInfo(){
// 获取XML的根节点
Element root = doc.getRootElement();
int id = 0;
for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();) {
Element brand = (Element) itBrand.next();
id++;
brand.addAttribute("id", id + "");
}
saveXML("src/收藏信息.xml");
}
public static void deleteItem(){
// 获取XML的根节点
Element root = doc.getRootElement();
int id = 0;
for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();) {
Element brand = (Element) itBrand.next();
if (brand.attributeValue("name").equals("华为")) {
brand.getParent().remove(brand);
}
}
// saveXML("src/收藏信息.xml");
}
public static void showPhoneInfo() {
// 获取XML的根节点
Element root = doc.getRootElement();
// 遍历所有的Brand标签
for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();) {
Element brand = (Element) itBrand.next();
// 输出标签的name属性
System.out.println("品牌:" + brand.attributeValue("name"));
// 遍历Type标签
for (Iterator itType = brand.elementIterator(); itType.hasNext();) {
Element type = (Element) itType.next();
// 输出标签的name属性
System.out.println("\t型号:" + type.attributeValue("name"));
}
}
}
public static void saveXML(String path){
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 指定XML编码
XMLWriter writer;
writer = new XMLWriter(new FileWriter(path), format);
writer.write(doc);
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void addNewPhoneInfo(){
// 获取XML的根节点
Element root = doc.getRootElement();
// 创建Brand标签
Element el = root.addElement("Brand");
// 给Brand标签设置属性
el.addAttribute("name", "三星");
// 创建Type标签
Element typeEl = el.addElement("Type");
// 给Type标签设置属性
typeEl.addAttribute("name", "Note4");
saveXML("新收藏.xml");
}
}