XML(二)
一、 使用DOM操作XML(修改和删除)
1、根据标签名获取元素节点列表: NodeList getElementsByTaName(String tagName)
2、获取节点列表长度: int getLength();
3、根据索引获取节点列表中的元素: Node item(String name)
4、设置元素节点的属性:void setAttrbute(String name,String value);
5、获取和设置元素节点内容:String getTextContent();
void setTextContent(String textContent);
6、获取元素节点的元素名称:String getTagName();
7、获取节点的所有子节点列表: NodeList getChildNodes();
8、获取节点的父节点:Node getParentNode();
9、删除某个子节点:void removerChild(Node hildNode);
二、使用DOM4J操作XML(CRUD)
1.6.1版本
1、获取根元素:Element getRootElment();
2、获取指定名称的子元素 :List elements(String tagName);
3、获取所有的子元素节点: List elements();
4、获取指定的子元素节点(单个): Element elementTest(String tagName);
5、获取指定子元素的的内容:String elementText(String tagName);
6、获取指定元素的内容(去除空格):String elementTextTrim(String tagName);
7、给元素节点添加属性:void addAttribute(String name,String value);
8、给元素节点添加内容:void addTest(String text); 如果内容有使用 void setText(String text);
9、根据名称创建并添加元素节点: Element addElement(String tagName);
10、删除子元素节点:void remove(Element element);
详细见代码:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<!-- 注释 -->
<book id="01">
<name>了不起的盖茨比</name>
<author>弗·司各特·菲茨杰拉德</author>
</book>
<book id="02">
<name>三体</name>
<author>刘慈欣</author>
</book>
<book id="03">
<name>人性的弱点</name>
<author>戴尔·卡耐基</author>
</book>
<book id="04">
<name>红楼梦</name>
<author>曹雪芹</author>
</book>
</books>
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 使用Doma4j解析存储XML文件
* @author Douer
*
*/
public class Doma4j {
//用于收藏 .xml 信息 对应的Document对象 (注意不要导错包org.dom4j.Document)
private Document document;
//获得Document对象 方法
public void getDom(String site) {
//创建解析器
SAXReader saxreader = new SAXReader();
try {
document = saxreader.read(new File(site));
} catch (DocumentException e) {
e.printStackTrace();
}
}
//获取XML信息 方法
public void showInof() {
//获取XML根节点 (注意不要导错包org.dom4j.Document)
Element element = document.getRootElement();
//获取所有根的元素节点 存到迭代器中
Iterator iterator = element.elementIterator();
//遍历
while(iterator.hasNext()) {
//类型转换
Element all = (Element) iterator.next();
// 查找id 元素 并输出
System.out.println("ID: "+all.attributeValue("id"));
//获取所有book子元素节点 存到迭代器中
Iterator iterator1 = all.elementIterator();
//遍历
while(iterator1.hasNext()) {
//类型转换
Element all1 = (Element) iterator1.next();
//org.dom4j.Document包 获取属性节点名称 和 属性节点内容 并输出
System.out.println(all1.getName()+":"+all1.getText());
}
System.out.println("——————————————————");
}
}
//添加XML信息 方法
public void addInfo() {
//获得XML的根元素
Element element = document.getRootElement();
//创建 book 元素
Element addBook = element.addElement("book");
//给 book 元素节点添加属性id属性
addBook.addAttribute("id", "5");
//创建 name 属性节点 向 name 中添加内容
Element addName = addBook.addElement("name");
addName.setText("全球通史");
Element addAuthor = addBook.addElement("author");
addAuthor.setText("L.S.斯塔夫里阿诺斯");
}
//将存到内存的XML 信息持久化到本地为文件中
public void save(String site) throws UnsupportedEncodingException, FileNotFoundException {
//创建转换器 对象
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
//设置好编码格式
// format.setEncoding("UTF-8");
try {
//设置输出地址 编码格式 和 设置转换格式
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(site),"UTF-8"),format);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally {
//关流
try {
if(writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//修改XML 信息 方法
public void amend() {
//获得XML的根元素
Element element = document.getRootElement();
//获取所有根的元素节点 存到迭代器中
Iterator iterator = element.elementIterator();
//遍历
while(iterator.hasNext()) {
//类型转换
Element all = (Element) iterator.next();
if(all.attributeValue("id").equals("01")) {
all.element("name").setText("盗墓笔记");
all.element("author").setText("南派三叔");
}
}
try {
save("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
} catch (UnsupportedEncodingException | FileNotFoundException e) {
e.printStackTrace();
}
}
//删除XML 信息 方法
private void delete() {
//获得XML的根元素
Element element = document.getRootElement();
//所有根的元素节点 存到迭代器中
Iterator iterator = element.elementIterator();
//遍历
while(iterator.hasNext()) {
//类型转换
Element all = (Element) iterator.next();;
if(all.attributeValue("id").equals("02")) {
//自己不能删除自己 所以需要用它的根节点
element.remove(all);
}
}
try {
save("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
} catch (UnsupportedEncodingException | FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Doma4j doma4j = new Doma4j();
//获取DOM对象 传入地址
doma4j.getDom("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
//获取XML 信息
doma4j.showInof();
//添加XML信息
doma4j.addInfo();
//将存到内存的XML 信息持久化到本地为文件中
try {
doma4j.save("E:\\Gatsby\\complete\\Eclipse-accomplish\\5y\\src\\sky10two\\test.xml");
} catch (UnsupportedEncodingException | FileNotFoundException e) {
e.printStackTrace();
}
//修该XML 信息
doma4j.amend();
//删除XML 信息
doma4j.delete();
}
}