目录
1.解析XML
1.1DOM
1.2SAX(不常用)
1.3DOM4J(常用)
2.DOM4J解析
2.1常用API
Document接口:定义XML文档
Element接口:定义XML元素
Text接口:定义XML文本节点
Attribute接口:定义XML属性
2.2准备环境
2.2.1.配置环境
将工程的所有设置配置成utf-8,并导入jar包,并手工创建XML文件
在工程下创建文件夹,命名为lib
将文件Dom4j-1.6.1.jar复制进去
右击文件,选择add path
2.2.2.准备XML文件
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="Mate30 Pro"></Type>
<Type name="p30 Pro"></Type>
<Type name="nova 6"></Type>
</Brand>
<Brand name="苹果">
<Type name="iPhione1 Pro"></Type>
</Brand>
</PhoneInfo>
文件名为a.xml
2.2.3.需求:
1.显示手机收藏信息
2.为手机收藏信息添加新的节点
3.保存手机收藏信息
4.修改手机收藏信息节点
5.删除品牌为"华为"的手机
2.3加载DOM树
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class Dom4jXML1 {
/*
* 1.加载DOM树
*/
public void loadXML() {
// 1.实例化SAXReader对象
SAXReader saxReader = new SAXReader();
try {
// 2.添加包,并查看返回值,导入
Document doc = saxReader.read("src\\a.xml");
// 3.查看输出是否成功
System.out.println(doc);
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// 4.调用方法,判断成功
Dom4jXML1 dom4jXML = new Dom4jXML1();
dom4jXML.loadXML();
}
}
3.4实现需求
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jXML1 {
Document doc = null;
/*
* 1.加载DOM树
*/
public void loadXML() {
// 1.实例化SAXReader对象
SAXReader saxReader = new SAXReader();
try {
// 2.调用saxReader的read()方法,添加包,并查看返回值,导入
doc = saxReader.read("src\\a.xml");
// 3.查看输出是否成功
System.out.println(doc);
} catch (DocumentException e) {
e.printStackTrace();
}
}
/*
* 2.查询XML
*/
public void findXML() {
// 1.调用getRootElement()获取根节点
Element root = doc.getRootElement();
// 2.遍历根节点,得到所有的儿子元素brandInfos
Iterator brandInfos = root.elementIterator();
// 3. 遍历儿子元素brandInfos
while (brandInfos.hasNext()) {
// 4.获取儿子元素节点
Element brandInfo = (Element) brandInfos.next();
// 5.打印儿子元素节点name属性
System.out.println(brandInfo.attributeValue("name"));
// 6.获取孙子对象节点
Iterator types = brandInfo.elementIterator();
while (types.hasNext()) {
// 7.获取孙子对象节点
Element type = (Element) types.next();
// 8.打印孙子对象节点的name属性
System.out.println(type.attributeValue("name"));
}
}
}
/*
* 添加节点
*/
public void addXML() {
// 1.获取根节点
Element root = doc.getRootElement();
// 2.添加儿子元素节点
Element brandInfos = root.addElement("Brand");
// 3.给儿子节点元素添加name属性
brandInfos.addAttribute("name", "三星");
// 4.添加孙子节点
Element types = brandInfos.addElement("Type");
// 5.给孙子节点添加属性name
types.addAttribute("name", "note4");
saveXML("src\\b.xml");
}
/*
* 保存
*/
public void saveXML(String path) {
// 1.调用OutputFormat类的creatPrettyPrint()
OutputFormat format = OutputFormat.createPrettyPrint();
// 2.设置字符集
format.setEncoding("utf-8");
// 3.创建XMLWriter对象
XMLWriter writer = null;
try {
// 4.调用XMLWriter对象
writer = new XMLWriter(new FileWriter(path), format);
// 5.输出给文件
writer.write(doc);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 6.关闭流对象
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* 修改
*/
public void updateXML() {
// 1.调用getRootElement()获取根节点
Element root = doc.getRootElement();
// 2.遍历根节点,得到所有的儿子元素brandInfos
Iterator brandInfos = root.elementIterator();
// 3.定义变量id
int id = 0;
// 4.循环遍历儿子元素集合
while (brandInfos.hasNext()) {
Element brand = (Element) brandInfos.next();
id++;
brand.addAttribute("id", id + "");
}
saveXML("src\\c.xml");
}
/*
* 删除
*/
public void removeXML() {
// 1.调用getRootElement()获取根节点
Element root = doc.getRootElement();
// 2.遍历根节点,得到所有的儿子元素brandInfos
Iterator brandInfos = root.elementIterator();
// 3. 遍历儿子元素brandInfos
while (brandInfos.hasNext()) {
// 4.获取儿子元素节点
Element brandInfo = (Element) brandInfos.next();
if (brandInfo.attributeValue("name").equals("华为"))
brandInfo.getParent().remove(brandInfo);
}
saveXML("src\\d.xml");
}
public static void main(String[] args) {
// 4.调用方法,判断成功
Dom4jXML1 dom4jXML = new Dom4jXML1();
dom4jXML.loadXML();
dom4jXML.addXML();
dom4jXML.updateXML();
dom4jXML.removeXML();
dom4jXML.findXML();
}
}