DOM4J
- Document:定义XML文档
- Element:定义XML元素
- Text:定义XML文本节点
- Attribute:定义了XML的属性
接收XML:
- SAXReader reader = new SAXReader(); // 创建SAXReader对象
- read(File file) : Document // 得到XML的文档信息
读取XML信息:
- getRootElement() ; Element // 获得XML的根元素
element.elementIterator() : iterator // 创建迭代器获得所有子节点 - while(hasNext()) // 遍历子节点
- (Element)xxx.next(); // 将指针找到的节点强转为元素
- attributeValue(String str) : String // 得到对应元素属性的字符串
- xxx.elementIterator() : Iterator // 获得子元素的下级元素重复2-4
添加元素:
- getRootElement() ; Element // 获得XML的根元素
- addElement(String str) : Element // 添加子节点
- addAttribute(String str1, String str2) : Element // 添加子节点的属性
修改元素:
- getRootElement() ; Element // 获得XML的根元素
- elementIterator(String str) : Iterator // 获得要修改的节点的迭代器
- while(hasNext()) // 遍历子节点
- (Element)xxx.next(); // 将指针找到的节点强转为元素
- addAttribute(String str1, String str2) : Element // 添加子节点的属性
- Attribute(String str) : Attribute // 获得元素的属性
- remove(Attribute) : Boolean // 删除元素的属性
删除元素:
- getRootElement() ; Element // 获得XML的根元素
- elementIterator(String str) : Iterator // 获得要删除的节点的迭代器
- while(hasNext()) // 遍历子节点
- (Element)xxx.next(); // 将指针找到的节点强转为元素
- if(attributeValue(Stirng str).equals(“String str”)) //判断是否为要删除的元素
- getParent() : Element // 获得父节点
- getParent().remove(Element) : Boolean // 用父节点删除子节点
保存Document:
- OutputFormat.createPrattyPrint() : OutputFormat // 创建格式化对象
- setEncoding(String str) : void // 设置XML的编码格式
- setIndent(String str) : void // 设置缩进
- new XMLWriter(OutputStream out, OutputFormat format) // 构造写入对象
- write(Document arg) : void // 写入XML文件
示例:
/**
* Dom4j的使用
* @author 周太阳
* @version 1.0
* 2019年5月1日 下午8:40:28
*/
public class Dom4jDemo {
// 创建dom4j的Document属性
private Document document;
// 得到Document对象
public void getDocument() {
// 创建dom4j解析器
SAXReader reader = new SAXReader();
// 读入XML文件
try {
document = reader.read(new File("src/kgc/may/first/dom4j/收藏信息.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
* 显示XML的信息
*/
public void showInfo() {
// 获得根目录的所有元素
Element root = document.getRootElement();
// 创建迭代器获得所有brand
Iterator eleBrand = root.elementIterator();
// 遍历brand
while (eleBrand.hasNext()) {
// 将指针找到的brand对象强转为元素
Element brands = (Element)eleBrand.next();
// 得到对应brand元素的属性
String brand = brands.attributeValue("name");
System.out.println(brand);
// 得到brand下的所有子元素
Iterator eleType = brands.elementIterator();
// 遍历type
while (eleType.hasNext()) {
// 将指针找到的type对象强转为元素
Element types = (Element)eleType.next();
// 得到对应的type属性
String type = types.attributeValue("name");
System.out.println("\t"+type);
}
}
}
/**
* 添加元素
*/
public void addEle() {
// 获得根元素
Element root = document.getRootElement();
// 添加子节点
Element addElement = root.addElement("brand");
// 添加子节点的属性
Element addBrand = addElement.addAttribute("name", "三星");
// 添加子节点的子元素
Element addtype = addBrand.addElement("type");
// 添加子元素的属性
addtype.addAttribute("name", "Note3");
}
/**
* 修改元素节点
*/
public void updata() {
// 获得根元素
Element root = document.getRootElement();
// 获得brand子节点的迭代器
Iterator element = root.elementIterator("brand");
// 声明一个计数变量
int id = 0;
// 遍历子节点
while (element.hasNext()) {
// 找到子节点强转为元素
Element brand = (Element)element.next();
id++;
// 添加子元素的属性
brand.addAttribute("id", id+"");
// 获得要删除的子元素属性
Attribute attributeValue = brand.attribute("id");
// 删除子元素的属性
brand.remove(attributeValue);
}
}
/**
* 删除元素
*/
public void deleteEle() {
// 获得根元素
Element root = document.getRootElement();
// 获得子节点的迭代器
Iterator element = root.elementIterator("brand");
// 遍历子节点
while (element.hasNext()) {
// 将得到的子节点强转为元素
Element brands = (Element)element.next();
// 判断是否为要删除的元素
if(brands.attributeValue("name").equals("苹果")) {
// 用父节点删除子节点
brands.getParent().remove(brands);
}
}
}
/**
* 保存XML
*/
public void saveXML(String pathname) {
// 创建格式对象
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码格式
format.setEncoding("UTF-8");
// 是否缩进
format.setIndent(true);
// 设置缩进格式
format.setIndent("\t");
// 创建输出流
XMLWriter write = null;
try {
write = new XMLWriter(new FileOutputStream(pathname),format);
// 写入新的Document
write.write(document);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 创建本类对象
Dom4jDemo demo = new Dom4jDemo();
// 获得Document
demo.getDocument();
// 添加新的元素
demo.addEle();
// 修改元素
demo.updata();
// 删除元素
demo.deleteEle();
// 保存新的Document到XML文件
demo.saveXML("src\\kgc\\may\\first\\dom4j\\newxml.xml");
// 得到手机信息
demo.showInfo();
}
}