Dom4j对xml增删改查的实例详解
最近在弄网站收录的事,需要将网站文章的链接地址添加到一个叫sitemap.xml的文件,由于每次都要手动添加,非常的麻烦,而且一旦文章有变动,比如删除了原先收录的文章,也要去更新该xml文档,于是就想写一个简单的xml工具类对sitemap.xml进行操作。
创建xml文件其实是一个单调的过程,数据量大时可以用循环解决。需要的jar包可以度娘下载。
需要用到的类:org.dom4j.Documen、 org.dom4j.DocumentHelper、 org.dom4j.Element。
用到的方法:
添加节点:addElement()
添加属性:addAttribute()
添加节点值:addText()
添加注释:addComment()
移除节点、属性等:remove()
修改节点的文本:setText()
package com.swissabl.view;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import com.dydm.bean.SitemapBean;
public class Dom4jUtil {
/**
* 由DocumentHelper创建document
* 定义一个XML文档对象
*
* @return
*/
public static Document createDomFJ() {
Document doc = DocumentHelper.createDocument();
return doc;
}
/**
* 定义一个XML文档对象
* 由SAXReader读取xml文件生成document
* xmlFilePath:xml文档路径
*
* @return
*/
public static Document readDomFJ(String xmlFilePath) {
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File(xmlFilePath));
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
/**
* 给文档添加根节点
*
* @param elName 子节点名称
* @param doc 文档
* @return
*/
public static Element appendChile(String elName, Document doc) {
Element root = doc.addElement(elName);
return root;
}
/**
* 给父节点添加子节点
*
* @param elName 子节点的名称
* @param el 父节点
* @return
*/
public static Element appendChile(String elName, Element el) {
Element sub = el.addElement(elName);
return sub;
}
/**
* 添加子节点及其对应的值
*
* @param elName 子节点的名称
* @param value 子节点的值
* @param el 父节点
*/
public static void appendChile(String elName, String value, Element el) {
Element sub = el.addElement(elName);
sub.setText(value);
}
/**
* 根目录添加注释
*
* @param explain 说明文字
* @param doc
*/
public static void addCommend(String explain, Document doc) {
doc.addComment(explain);
}
/**
* 为子节点添加说明
*
* @param explain
* @param element
*/
public static void addCommend(String explain, Element element) {
element.addComment(explain);
}
/**
* 为节点添加属性
*
* @param attName
* @param attValue
* @param element
*/
public static void addAttribute(String attName, String attValue,
Element element) {
element.addAttribute(attName, attValue);
}
/***
* xml文档转化为string
* xmlFilePath:"WebRoot\\sitemap.xml"
*/
public static String xmlToString(String xmlFilePath) {
String text = "";
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File(xmlFilePath));
text = document.asXML();
} catch (DocumentException e) {
e.printStackTrace();
}
return text;
}
/***
* 字符串转XML
*
* @param xmlText:xml格式的字符串
* @return
*/
public static Document stringToDocument(String xmlText) {
Document document = null;
try {
document = DocumentHelper.parseText(xmlText);
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
/***
* sitemap.xml转化为SitemapBean实体类
*/
@SuppressWarnings("unchecked")
public static List<SitemapBean> sitemapToSitemapBeans() {
List<SitemapBean> sitemapBeans = new ArrayList<SitemapBean>();
try {
String xmlFilePath = "WebRoot\\sitemap.xml";
SAXReader reader = new SAXReader();
Document document = reader.read(new File(xmlFilePath));
//获取根节点
Element rootElement = document.getRootElement();
// 获取所有子节点
List<Element> childList = rootElement.elements();
//输出节点数目
System.out.println(childList.size());
Iterator<Element> iter = childList.iterator();
int i = 0;
while (iter.hasNext()) {
i++;
Element urlElement = (Element) iter.next();
//节点文本内容原样输出,不处理空格
//String loc=urlElement.element("loc").getText();
//节点文本内容处理空格后输出
String loc = urlElement.element("loc").getTextTrim();
String lastmod = urlElement.element("lastmod").getTextTrim();
String changefreq = urlElement.element("changefreq").getTextTrim();
String priority = urlElement.element("priority").getTextTrim();
SitemapBean sitemapBean = new SitemapBean();
sitemapBean.setLoc(loc);
sitemapBean.setLastmod(lastmod);
sitemapBean.setChangefreq(changefreq);
sitemapBean.setPriority(priority);
sitemapBeans.add(sitemapBean);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return sitemapBeans;
}
/***
* 往sitemap.xml添加节点
*/
public static void addElementToSitemap(String loc, String lastmod, String changefreq, String priority) {
try {
String xmlFilePath = "WebRoot\\sitemap.xml";
SAXReader reader = new SAXReader();
//创建document
Document document = reader.read(new File(xmlFilePath));
//获取根节点
Element rootElement = document.getRootElement();
//往根节点添加url子节点
Element urlElement = rootElement.addElement("url");
//往url子节点添加loc节点
Element locElement = urlElement.addElement("loc");
//为loc节点添加文本
locElement.setText(loc);
//为loc节点添加属性
//locElement.addAttribute("attr1", "attr1Val");
//加入一行注释
//locElement.addComment("我是第一代码的注释");
//往url子节点添加lastmod节点
Element lastmodElement = urlElement.addElement("lastmod");
//为lastmod节点添加文本
lastmodElement.setText(lastmod);
//往url子节点添加changefreq节点
Element changefreqElement = urlElement.addElement("changefreq");
//为changefreq节点添加文本
changefreqElement.setText(changefreq);
//往url子节点添加priority节点
Element priorityElement = urlElement.addElement("priority");
//为priority节点添加文本
priorityElement.setText(priority);
//保存xml
saveXMLFile(document, xmlFilePath);
} catch (DocumentException e) {
e.printStackTrace();
}
}
/***
* 保存xml
*
* @param document
*/
public static void saveXMLFile(Document document, String filePath) {
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(
new FileWriter(new File(filePath)), format);
writer.write(document);
writer.close();
} catch (Exception e) {
}
}
/***
* 删除节点
* locText:要删除的节点的文本内容
*/
public static void deleteNode(String locText) {
String xmlFilePath = "WebRoot\\sitemap.xml";
//获取一个文档对象
Document document = readDomFJ(xmlFilePath);
//获取根节点
Element rootElement = document.getRootElement();
// 获取所有子节点
List<Element> childList = rootElement.elements();
Iterator<Element> iter = childList.iterator();
while (iter.hasNext()) {
Element urlElement = (Element) iter.next();
//节点文本内容处理空格后输出
Element locElement = urlElement.element("loc");
String loc = locElement.getTextTrim();
//节点文本内容原样输出,不处理空格
//String loc=locElement.getText();
if (loc.equals(locText)) {
//修改文本
//locElement.setText("新的文本");
//从该loc节点的父节点里删除该节点
urlElement.remove(locElement);
//删除该节点的父节点
//rootElement.remove(locElement.getParent());
//或者
//rootElement.remove(urlElement);
}
}
}
/***
* 修改、删除节点属性、删除节点属性所在节点的父节点
* attrVal:要删除的节点的属性值
*/
public static void deleteAttr(String attrVal) {
String xmlFilePath = "WebRoot\\sitemap.xml";
//获取一个文档对象
Document document = readDomFJ(xmlFilePath);
//获取根节点
Element rootElement = document.getRootElement();
// 获取所有子节点
List<Element> childList = rootElement.elements();
Iterator<Element> iter = childList.iterator();
while (iter.hasNext()) {
Element urlElement = (Element) iter.next();
//节点文本内容处理空格后输出
Element locElement = urlElement.element("loc");
List<Attribute> attrs = locElement.attributes();
Iterator<Attribute> iter2 = attrs.iterator();
while (iter2.hasNext()) {
Attribute attribute = (Attribute) iter2.next();
//获取属性值
String value = attribute.getValue();
if (value.equals(attrVal)) {
//修改属性值
//attribute.setValue("新的属性值");
//删除该属性
locElement.remove(attribute);
//删除该属性所在节点的父节点
//urlElement.remove(locElement);
}
}
}
}
}
文章地址:https://www.diyidaima.com/blogs/uefzm1ln.html
如果此博文帮助到你,麻烦点个赞哈!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。