DOM4j解析xml文件
// 创建解析器
SAXReader reader = new SAXReader();
// 利用解析器读入xml文档
Document dom = reader.read(xmlFilePath);
// 获取文档的根节点
Element root = dom.getRootElement();
DOM4j操作节点
// 1.取得某个节点的子节点.
Element node = root.element("书名");
// 获取节点为 "书名" 的集合
List elementList = root.elements("书名");
// 获取所有节点集合
// List elementList = root.elements();
// 2.获取节点的名字
node.getName();
// 3.设置节点的名字
node.setName("新名字");
// 4.取得节点的文字(标签体)
String text = node.getText();
// 5.设置节点的文字(标签体)
node.setText("aaa");
// 6.添加子节点.
Element ele = DocumentHelper.createElement("新节点");
node.add(ele);
ele.addElement("age");
// 7.删除子节点节点(父节点移除子节点)
// parentElm.remove(childElm);
// 8获取节点类型
node.getNodeType();
// 9.获取父节点
node.getParent();
DOM4j操作属性
// 1.取得某节点对象的某属性
// 根据名称找属性
Attribute attr = ele.attribute("aaa");
// 根据索引找属性
// Attribute attr= ele.attribute(0);
List list = ele.attributes();
String value = ele.attributeValue("aaa");
Iterator it = ele.attributeIterator();
// 2.设置某节点的属性
ele.add(attr);
ele.addAttribute("新属性", "新属性值");
// 设置所有集合节点的属性
ele.setAttributes(list);
// 3.删除某属性
ele.remove(attr);
// 4.取得属性的名、值
String name = attr.getName();
String value = attr.getValue();
// 5.设置某属性的名、值
attr.setName("新名字");
attr.setValue("新值");
DOM4j字符串和XML的转换
// 1.将字符串转化为XML
String text = "<members> <member>sitinspring</member></members>";
Document document = DocumentHelper.parseText(text);
// 2.将文档或节点的XML转化为字符串
String xmlStr = node.asXML();
DOM4j将文档写入XML文件
/**
* 将内存中的dom树会写到xml文件中,从而使xml中的数据进行更新
*
* @param dom
* @param savePath
* @throws Exception
*/
public void WriteXML(Document dom, String savePath) throws Exception {
// 方式一
// 注意:FileWriter默认使用操作系统本地码表即gb2312编码,并且无法更改。
// 此时可以使用OutputStreamWriter(FileOutputStream("filePath"),"utf-8");的方式自己封装一个指定码表的Writer使用,从而解决乱码问题。
// FileWriter writer = new FileWriter("book.xml");
// dom.write(writer);
// writer.flush();
// writer.close();
// 方式二
// 注意:使用这种方式输出时,XMLWriter首先会将内存中的docuemnt翻译成UTF-8格式的document,在进行输出,这时有可能出现乱码问题。
// 可以使用OutputFormat 指定XMLWriter转换的编码为其他编码。
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
FileOutputStream fos = new FileOutputStream(savePath);
XMLWriter writer = new XMLWriter(fos, format);
writer.write(dom);
writer.close();
}
综合例子
/**
* 新增一个节点
*
* @param xmlFilePath
* @throws Exception
*/
public void AddDom(String xmlFilePath) throws Exception {
// 创建解析器
SAXReader reader = new SAXReader();
// 利用解析器读入xml文档
Document dom = reader.read(xmlFilePath);
// 获取文档的根节点
Element root = dom.getRootElement();
// 凭空创建<特价>节点,设置标签体
Element element = CreateElement("特价", "40.0元");
// 获取父标签<书>将特价节点挂载上去
// root.add(element);
root.element("书").element("特价").add(element);
WriteXML(dom, xmlFilePath);
}
/**
* 创建一个XML 节点
*
* @param elementNmae
* 节点名称
* @param elementValue
* 节点值
* @return
*/
public Element CreateElement(String elementNmae, String elementValue) {
Element element = DocumentHelper.createElement(elementNmae);
element.setText(elementValue);
return element;
}
/**
* 修改一个节点值
*
* @param xmlFilePath
* @throws Exception
*/
public void updateDom(String xmlFilePath) throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read(xmlFilePath);
Element root = dom.getRootElement();
root.element("书").element("特价").setText("4.0元");
WriteXML(dom, xmlFilePath);
}
/**
* 删除指定节点
*
* @param xmlFilePath
* @throws Exception
*/
public void deleteDom(String xmlFilePath) throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read(xmlFilePath);
Element root = dom.getRootElement();
DeleteDom(root.element("书"), "特价");
WriteXML(dom, xmlFilePath);
}
/**
* 删除指定节点
*
* @param parentDom
* 要删除的节点的上一级节点
* @param elementName
* 要删除的节点名称
*/
public void DeleteDom(Element parentDom, String elementName) {
Element price2Ele = parentDom.element(elementName);
price2Ele.getParent().remove(price2Ele);
}
/**
* 查找指定节点值
*
* @param xmlFilePath
* @throws Exception
*
*/
public String FindDom(String xmlFilePath) throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read(xmlFilePath);
Element root = dom.getRootElement();
List<Element> list = root.elements();
Element book2Ele = list.get(1);
String text = book2Ele.element("书名").getText();
System.out.println(text);
return text;
}
/**
* 操作Dom节点属性
*
* @throws Exception
*/
public void HandleDomAttr(String xmlFilePath) throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read(xmlFilePath);
Element root = dom.getRootElement();
Element bookEle = root.element("书");
// bookEle.addAttribute("出版社", "传智出版社");//增加属性
// String str = bookEle.attributeValue("出版社");//修改属性
// 删除属性
DeleteElementAttr(bookEle, "出版社");
WriteXML(dom, xmlFilePath);
}
/**
* 删除节点属性
*
* @param element
*/
public void DeleteElementAttr(Element element, String attrName) {
Attribute attr = element.attribute(attrName);
attr.getParent().remove(attr);
}