- 浏览: 855520 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
Dom4j为XML文档解析提供了强大的API支持,在实际开发中,为了处理方便,常常以节点元素(Element)为单位进行处理,并且结合数据库和Java技术,为节点生成ID属性。这样,就很有必要在Dom4j的基础上,重新封装一些适用需要的方法,以提高开发效率。下面是我利用业余时间做的一个Dom4j节点处理器工具类的实现。希望能节省开发人员宝贵时间。
说明:为了写起来方便,可以单独运行,我没有写单独的测试类,实际用的时候,删除掉测试main()和test()方法即可。
注释很详细,不用废话了。下面是处理器的实现:
- package com.topsoft.icib.common.utils;
- import org.dom4j.*;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.commons.lang.StringUtils;
- import java.util.Random;
- import java.util.Iterator;
- import java.util.ArrayList;
- /**
- * Created by IntelliJ IDEA.<br>
- * <b>User</b>: leizhimin<br>
- * <b>Date</b>: 2008-3-27 18:42:39<br>
- * <b>Note</b>: XML节点处理器,包含XML元素的CRUD方法。
- */
- public class XmlNodeHandler {
- private static Log log = LogFactory.getLog(XmlNodeHandler.class);
- /**
- * 在xml的指定位置插入一个元素
- *
- * @param srcXml 原xml
- * @param nodeXml 元素xml
- * @param xpath 要插入元素父节点的位置
- * @return 原xml插入节点后的完整xml文档
- */
- public static String addElement(String srcXml, String nodeXml, String xpath) {
- String resultXml = null;
- try {
- Document docSrc = DocumentHelper.parseText(srcXml);
- Document docNode = DocumentHelper.parseText(nodeXml);
- Element parentElement = (Element) docSrc.getRootElement().selectSingleNode(xpath);
- parentElement.add(docNode.getRootElement());
- resultXml = docSrc.asXML();
- } catch (DocumentException e) {
- log.error("在文档" + xpath + "位置添加新节点发生异常,请检查!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 删除xml文档中指定ID的元素
- *
- * @param srcXml 原xml
- * @param xmlNodeId 元素ID属性值
- * @return 删除元素后的xml文档
- */
- public static String removeElementById(String srcXml, String xmlNodeId) {
- String resultXml = null;
- try {
- Document docSrc = DocumentHelper.parseText(srcXml);
- Element removeElement = docSrc.getRootElement().elementByID(xmlNodeId);
- removeElement.detach(); //直接删除自己
- // removeElement.getParent().remove(removeElement); //从父节点删除子节点
- resultXml = docSrc.asXML();
- } catch (DocumentException e) {
- log.error("删除文档中ID为" + xmlNodeId + "的节点发生异常,请检查!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 删除xml文档中以xpath为直接父节点的ID属性为空的子节点,ID属性为空包括值为空、空串、或者ID属性不存在。
- *
- * @param srcXml 原xml文档
- * @param xpath 要删除空节点的所在父节点的xpath
- * @return 删除空节点后的xml文档
- */
- public static String removeNullIdElement(String srcXml, String xpath) {
- String resultXml = null;
- try {
- Document srcDoc = DocumentHelper.parseText(srcXml);
- removeNullIdElement(srcDoc, xpath);
- resultXml = srcDoc.asXML();
- } catch (DocumentException e) {
- log.error("在" + xpath + "下删除空节点发生异常,请检查xpath是否正确!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 删除xml文档中以xpath为直接父节点的ID属性为空的子节点,ID属性为空包括值为空、空串、或者ID属性不存在。
- *
- * @param srcDoc 原xml的Document对象
- * @param xpath 要删除空节点的所在父节点的xpath
- * @return 删除空节点后的xml文档
- */
- public static Document removeNullIdElement(Document srcDoc, String xpath) {
- Node parentNode = srcDoc.getRootElement().selectSingleNode(xpath);
- if (!(parentNode instanceof Element)) {
- log.error("所传入的xpath不是Elementpath,删除空节点失败!");
- } else {
- int i = 0;
- for (Iterator<Element> it = ((Element) parentNode).elementIterator(); it.hasNext();) {
- Element element = it.next();
- if (element.attribute("ID") == null) {
- element.detach();
- i++;
- } else {
- if (StringUtils.isBlank(element.attribute("ID").getValue())) {
- element.detach();
- i++;
- }
- }
- }
- log.info("在" + xpath + "下成功删除" + i + "了个空节点!");
- }
- return srcDoc;
- }
- /**
- * 删除xml文档中指定xpath路径下所有直接子节点为空的节点
- *
- * @param srcXml 原xml文档
- * @param xpathList xpaht列表
- * @return 删除空节点后的xml文档
- */
- public static String removeAllNullIdElement(String srcXml, ArrayList<String> xpathList) {
- String resultXml = null;
- try {
- Document srcDoc = DocumentHelper.parseText(srcXml);
- for (Iterator<String> it = xpathList.iterator(); it.hasNext();) {
- String xpath = it.next();
- removeNullIdElement(srcDoc, xpath);
- }
- resultXml = srcDoc.asXML();
- } catch (DocumentException e) {
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 更新xml文档中指定ID的元素,ID保持不变
- *
- * @param srcXml 原xml
- * @param newNodeXml 新xml节点
- * @param xmlNodeId 更新元素ID属性值
- * @return 更新元素后的xml文档
- */
- public static String updateElementById(String srcXml, String newNodeXml, String xmlNodeId) {
- String resultXml = null;
- try {
- Document docSrc = DocumentHelper.parseText(srcXml);
- Document newDocNode = DocumentHelper.parseText(newNodeXml);
- //获取要更新的目标节点
- Element updatedNode = docSrc.elementByID(xmlNodeId);
- //获取更新目标节点的父节点
- Element parentUpNode = updatedNode.getParent();
- //删除掉要更新的节点
- parentUpNode.remove(updatedNode);
- //获取新节点的根节点(作为写入节点)
- Element newRoot = newDocNode.getRootElement();
- //处理新节点的ID属性值和BS子元素的值
- if (newRoot.attribute("ID") == null) {
- newRoot.addAttribute("ID", xmlNodeId);
- } else {
- newRoot.attribute("ID").setValue(xmlNodeId);
- }
- //在原文档中更新位置写入新节点
- parentUpNode.add(newRoot);
- resultXml = docSrc.asXML();
- } catch (DocumentException e) {
- log.error("更新xml文档中ID为" + xmlNodeId + "节点发生异常,请检查!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 更新xml文档中指定ID的元素,并检查ID和BS,加以设置
- *
- * @param srcXml 原xml
- * @param newNodeXml 新xml节点
- * @param xmlNodeId 更新元素ID属性值
- * @return 更新元素后的xml文档
- */
- public static String updateElementByIdAddIdBs(String srcXml, String newNodeXml, String xmlNodeId) {
- String resultXml = null;
- try {
- Document docSrc = DocumentHelper.parseText(srcXml);
- Document newDocNode = DocumentHelper.parseText(newNodeXml);
- //获取要更新的目标节点
- Element updatedNode = docSrc.elementByID(xmlNodeId);
- //获取更新目标节点的父节点
- Element parentUpNode = updatedNode.getParent();
- //删除掉要更新的节点
- parentUpNode.remove(updatedNode);
- //获取新节点的根节点(作为写入节点)
- Element newRoot = newDocNode.getRootElement();
- //处理新节点的ID属性值和BS子元素的值
- if (newRoot.attribute("ID") == null) {
- newRoot.addAttribute("ID", xmlNodeId);
- } else {
- newRoot.attribute("ID").setValue(xmlNodeId);
- }
- if (newRoot.element("BS") == null) {
- newRoot.addElement("BS", xmlNodeId);
- } else {
- newRoot.element("BS").setText(xmlNodeId);
- }
- //在原文档中更新位置写入新节点
- parentUpNode.add(newRoot);
- resultXml = docSrc.asXML();
- } catch (DocumentException e) {
- log.error("更新xml文档中ID为" + xmlNodeId + "节点发生异常,请检查!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 为xml元素设置ID属性
- *
- * @param xmlElement 原xml元素
- * @return 设置id后的xml串
- */
- public static String addIdAttribute(String xmlElement) {
- String resultXml = null;
- try {
- Document srcDoc = DocumentHelper.parseText(xmlElement);
- Element root = srcDoc.getRootElement();
- // Long nextValue = SequenceUtils.getSequeceNextValue();
- Long nextValue = new Random().nextLong();
- root.addAttribute("ID", nextValue.toString());
- resultXml = root.asXML();
- } catch (DocumentException e) {
- log.error("给xml元素设置ID属性发生异常,请检查!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- /**
- * 为xml元素设置ID属性,并将此属性写入一个指定子节点文本值域
- *
- * @param xmlElement 原xml元素
- * @param nodeName (直接)子节点的名称,或相对当前节点的xpath路径
- * @return 设置id和子节点后的xml串
- */
- public static String addIdAndWriteNode(String xmlElement, String nodeName) {
- String resultXml = null;
- try {
- Document srcDoc = DocumentHelper.parseText(xmlElement);
- Element root = srcDoc.getRootElement();
- // Long nextValue = SequenceUtils.getSequeceNextValue();
- Long nextValue = new Random().nextLong();
- root.addAttribute("ID", nextValue.toString());
- Node bsElement = root.selectSingleNode(nodeName);
- if (bsElement instanceof Element && bsElement != null) {
- bsElement.setText(nextValue.toString());
- } else {
- root.addElement(nodeName).setText(nextValue.toString());
- }
- resultXml = root.asXML();
- } catch (DocumentException e) {
- log.error("给xml元素设置ID属性和直接" + nodeName + "子元素值时发生异常,请检查!");
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- return resultXml;
- }
- public static void main(String args[]) {
- test();
- }
- public static void test() {
- System.out.println("----------test()----------");
- String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
- "<doc>\n" +
- " <person>\n" +
- " <name>某人</name>\n" +
- " <adds>\n" +
- " <add ID=\"10001\">\n" +
- " <BS>10001</BS>\n" +
- " <note>郑州市经三路</note>\n" +
- " </add>\n" +
- " <add ID=\"10002\">\n" +
- " <BS>10002</BS>\n" +
- " <note>西安市太白路</note>\n" +
- " </add>\n" +
- " <add ID=\"\">\n" +
- " <BS>10002</BS>\n" +
- " <note>空ID节点啊</note>\n" +
- " </add>\n" +
- " <add>\n" +
- " <BS>10002</BS>\n" +
- " <note>空ID节点啊</note>\n" +
- " </add>\n" +
- " </adds>\n" +
- " </person>\n" +
- " <other>\n" +
- " <name ID=\"HEHE\">ASDF</name>\n" +
- " <name>空ID节点啊</name>\n" +
- " <name>空ID节点啊</name>\n" +
- " </other>\n" +
- "</doc>";
- String nodeXml1 = " <add >\n" +
- " <BS></BS>\n" +
- " <note>西安市太白路1</note>\n" +
- " </add>";
- String nodeXml2 = " <add>\n" +
- " <note>西安市太白路2</note>\n" +
- " </add>";
- // System.out.println("输出三个测试对象");
- // System.out.println("----------srcXml------------");
- // System.out.println(srcXml);
- // System.out.println("----------nodeXml1------------");
- // System.out.println(srcXml);
- // System.out.println("----------nodeXml2------------");
- // System.out.println(srcXml);
- System.out.println("----------addElement()测试----------");
- String addrs = addElement(srcXml, nodeXml1, "/doc/person/adds");
- System.out.println(addrs);
- System.out.println("----------addIdAttribute()测试----------");
- String addIdrs = addIdAttribute(nodeXml1);
- System.out.println(addIdrs);
- System.out.println("----------addIdAndWriteNode()测试----------");
- String addIdNoders = addIdAndWriteNode(nodeXml1, "BS");
- System.out.println(addIdNoders);
- System.out.println("----------removeElementById()测试----------");
- String removeIdrs = removeElementById(srcXml, "10001");
- System.out.println(removeIdrs);
- System.out.println("----------updateElementByIdAddIdBs()测试----------");
- String upbyidrs = updateElementByIdAddIdBs(srcXml, nodeXml2, "10001");
- System.out.println(upbyidrs);
- System.out.println("----------updateElementById()测试----------");
- String upbyidrs1 = updateElementById(srcXml, nodeXml2, "10001");
- System.out.println(upbyidrs1);
- System.out.println("----------removeNullIdElement()测试----------");
- String rvnullrs = removeNullIdElement(srcXml, "/doc/person/adds");
- System.out.println(rvnullrs);
- System.out.println("----------removeAllNullIdElement()测试----------");
- ArrayList<String> xpathList = new ArrayList<String>();
- xpathList.add("/doc/person/adds");
- xpathList.add("/doc/other");
- String rvallnullrs = removeAllNullIdElement(srcXml, xpathList);
- System.out.println(rvallnullrs);
- System.out.println("----------Dom4j生成一个xml测试----------");
- Document doc = DocumentHelper.createDocument();
- doc.addElement("root")
- .addElement("person").setText("haha:)");
- System.out.println(doc.asXML());
- }
- }
package com.topsoft.icib.common.utils; import org.dom4j.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.lang.StringUtils; import java.util.Random; import java.util.Iterator; import java.util.ArrayList; /** * Created by IntelliJ IDEA.<br> * <b>User</b>: leizhimin<br> * <b>Date</b>: 2008-3-27 18:42:39<br> * <b>Note</b>: XML节点处理器,包含XML元素的CRUD方法。 */ public class XmlNodeHandler { private static Log log = LogFactory.getLog(XmlNodeHandler.class); /** * 在xml的指定位置插入一个元素 * * @param srcXml 原xml * @param nodeXml 元素xml * @param xpath 要插入元素父节点的位置 * @return 原xml插入节点后的完整xml文档 */ public static String addElement(String srcXml, String nodeXml, String xpath) { String resultXml = null; try { Document docSrc = DocumentHelper.parseText(srcXml); Document docNode = DocumentHelper.parseText(nodeXml); Element parentElement = (Element) docSrc.getRootElement().selectSingleNode(xpath); parentElement.add(docNode.getRootElement()); resultXml = docSrc.asXML(); } catch (DocumentException e) { log.error("在文档" + xpath + "位置添加新节点发生异常,请检查!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 删除xml文档中指定ID的元素 * * @param srcXml 原xml * @param xmlNodeId 元素ID属性值 * @return 删除元素后的xml文档 */ public static String removeElementById(String srcXml, String xmlNodeId) { String resultXml = null; try { Document docSrc = DocumentHelper.parseText(srcXml); Element removeElement = docSrc.getRootElement().elementByID(xmlNodeId); removeElement.detach(); //直接删除自己 // removeElement.getParent().remove(removeElement); //从父节点删除子节点 resultXml = docSrc.asXML(); } catch (DocumentException e) { log.error("删除文档中ID为" + xmlNodeId + "的节点发生异常,请检查!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 删除xml文档中以xpath为直接父节点的ID属性为空的子节点,ID属性为空包括值为空、空串、或者ID属性不存在。 * * @param srcXml 原xml文档 * @param xpath 要删除空节点的所在父节点的xpath * @return 删除空节点后的xml文档 */ public static String removeNullIdElement(String srcXml, String xpath) { String resultXml = null; try { Document srcDoc = DocumentHelper.parseText(srcXml); removeNullIdElement(srcDoc, xpath); resultXml = srcDoc.asXML(); } catch (DocumentException e) { log.error("在" + xpath + "下删除空节点发生异常,请检查xpath是否正确!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 删除xml文档中以xpath为直接父节点的ID属性为空的子节点,ID属性为空包括值为空、空串、或者ID属性不存在。 * * @param srcDoc 原xml的Document对象 * @param xpath 要删除空节点的所在父节点的xpath * @return 删除空节点后的xml文档 */ public static Document removeNullIdElement(Document srcDoc, String xpath) { Node parentNode = srcDoc.getRootElement().selectSingleNode(xpath); if (!(parentNode instanceof Element)) { log.error("所传入的xpath不是Elementpath,删除空节点失败!"); } else { int i = 0; for (Iterator<Element> it = ((Element) parentNode).elementIterator(); it.hasNext();) { Element element = it.next(); if (element.attribute("ID") == null) { element.detach(); i++; } else { if (StringUtils.isBlank(element.attribute("ID").getValue())) { element.detach(); i++; } } } log.info("在" + xpath + "下成功删除" + i + "了个空节点!"); } return srcDoc; } /** * 删除xml文档中指定xpath路径下所有直接子节点为空的节点 * * @param srcXml 原xml文档 * @param xpathList xpaht列表 * @return 删除空节点后的xml文档 */ public static String removeAllNullIdElement(String srcXml, ArrayList<String> xpathList) { String resultXml = null; try { Document srcDoc = DocumentHelper.parseText(srcXml); for (Iterator<String> it = xpathList.iterator(); it.hasNext();) { String xpath = it.next(); removeNullIdElement(srcDoc, xpath); } resultXml = srcDoc.asXML(); } catch (DocumentException e) { System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 更新xml文档中指定ID的元素,ID保持不变 * * @param srcXml 原xml * @param newNodeXml 新xml节点 * @param xmlNodeId 更新元素ID属性值 * @return 更新元素后的xml文档 */ public static String updateElementById(String srcXml, String newNodeXml, String xmlNodeId) { String resultXml = null; try { Document docSrc = DocumentHelper.parseText(srcXml); Document newDocNode = DocumentHelper.parseText(newNodeXml); //获取要更新的目标节点 Element updatedNode = docSrc.elementByID(xmlNodeId); //获取更新目标节点的父节点 Element parentUpNode = updatedNode.getParent(); //删除掉要更新的节点 parentUpNode.remove(updatedNode); //获取新节点的根节点(作为写入节点) Element newRoot = newDocNode.getRootElement(); //处理新节点的ID属性值和BS子元素的值 if (newRoot.attribute("ID") == null) { newRoot.addAttribute("ID", xmlNodeId); } else { newRoot.attribute("ID").setValue(xmlNodeId); } //在原文档中更新位置写入新节点 parentUpNode.add(newRoot); resultXml = docSrc.asXML(); } catch (DocumentException e) { log.error("更新xml文档中ID为" + xmlNodeId + "节点发生异常,请检查!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 更新xml文档中指定ID的元素,并检查ID和BS,加以设置 * * @param srcXml 原xml * @param newNodeXml 新xml节点 * @param xmlNodeId 更新元素ID属性值 * @return 更新元素后的xml文档 */ public static String updateElementByIdAddIdBs(String srcXml, String newNodeXml, String xmlNodeId) { String resultXml = null; try { Document docSrc = DocumentHelper.parseText(srcXml); Document newDocNode = DocumentHelper.parseText(newNodeXml); //获取要更新的目标节点 Element updatedNode = docSrc.elementByID(xmlNodeId); //获取更新目标节点的父节点 Element parentUpNode = updatedNode.getParent(); //删除掉要更新的节点 parentUpNode.remove(updatedNode); //获取新节点的根节点(作为写入节点) Element newRoot = newDocNode.getRootElement(); //处理新节点的ID属性值和BS子元素的值 if (newRoot.attribute("ID") == null) { newRoot.addAttribute("ID", xmlNodeId); } else { newRoot.attribute("ID").setValue(xmlNodeId); } if (newRoot.element("BS") == null) { newRoot.addElement("BS", xmlNodeId); } else { newRoot.element("BS").setText(xmlNodeId); } //在原文档中更新位置写入新节点 parentUpNode.add(newRoot); resultXml = docSrc.asXML(); } catch (DocumentException e) { log.error("更新xml文档中ID为" + xmlNodeId + "节点发生异常,请检查!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 为xml元素设置ID属性 * * @param xmlElement 原xml元素 * @return 设置id后的xml串 */ public static String addIdAttribute(String xmlElement) { String resultXml = null; try { Document srcDoc = DocumentHelper.parseText(xmlElement); Element root = srcDoc.getRootElement(); // Long nextValue = SequenceUtils.getSequeceNextValue(); Long nextValue = new Random().nextLong(); root.addAttribute("ID", nextValue.toString()); resultXml = root.asXML(); } catch (DocumentException e) { log.error("给xml元素设置ID属性发生异常,请检查!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } /** * 为xml元素设置ID属性,并将此属性写入一个指定子节点文本值域 * * @param xmlElement 原xml元素 * @param nodeName (直接)子节点的名称,或相对当前节点的xpath路径 * @return 设置id和子节点后的xml串 */ public static String addIdAndWriteNode(String xmlElement, String nodeName) { String resultXml = null; try { Document srcDoc = DocumentHelper.parseText(xmlElement); Element root = srcDoc.getRootElement(); // Long nextValue = SequenceUtils.getSequeceNextValue(); Long nextValue = new Random().nextLong(); root.addAttribute("ID", nextValue.toString()); Node bsElement = root.selectSingleNode(nodeName); if (bsElement instanceof Element && bsElement != null) { bsElement.setText(nextValue.toString()); } else { root.addElement(nodeName).setText(nextValue.toString()); } resultXml = root.asXML(); } catch (DocumentException e) { log.error("给xml元素设置ID属性和直接" + nodeName + "子元素值时发生异常,请检查!"); System.out.println(e.getMessage()); e.printStackTrace(); } return resultXml; } public static void main(String args[]) { test(); } public static void test() { System.out.println("----------test()----------"); String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" + "<doc>\n" + " <person>\n" + " <name>某人</name>\n" + " <adds>\n" + " <add ID=\"10001\">\n" + " <BS>10001</BS>\n" + " <note>郑州市经三路</note>\n" + " </add>\n" + " <add ID=\"10002\">\n" + " <BS>10002</BS>\n" + " <note>西安市太白路</note>\n" + " </add>\n" + " <add ID=\"\">\n" + " <BS>10002</BS>\n" + " <note>空ID节点啊</note>\n" + " </add>\n" + " <add>\n" + " <BS>10002</BS>\n" + " <note>空ID节点啊</note>\n" + " </add>\n" + " </adds>\n" + " </person>\n" + " <other>\n" + " <name ID=\"HEHE\">ASDF</name>\n" + " <name>空ID节点啊</name>\n" + " <name>空ID节点啊</name>\n" + " </other>\n" + "</doc>"; String nodeXml1 = " <add >\n" + " <BS></BS>\n" + " <note>西安市太白路1</note>\n" + " </add>"; String nodeXml2 = " <add>\n" + " <note>西安市太白路2</note>\n" + " </add>"; // System.out.println("输出三个测试对象"); // System.out.println("----------srcXml------------"); // System.out.println(srcXml); // System.out.println("----------nodeXml1------------"); // System.out.println(srcXml); // System.out.println("----------nodeXml2------------"); // System.out.println(srcXml); System.out.println("----------addElement()测试----------"); String addrs = addElement(srcXml, nodeXml1, "/doc/person/adds"); System.out.println(addrs); System.out.println("----------addIdAttribute()测试----------"); String addIdrs = addIdAttribute(nodeXml1); System.out.println(addIdrs); System.out.println("----------addIdAndWriteNode()测试----------"); String addIdNoders = addIdAndWriteNode(nodeXml1, "BS"); System.out.println(addIdNoders); System.out.println("----------removeElementById()测试----------"); String removeIdrs = removeElementById(srcXml, "10001"); System.out.println(removeIdrs); System.out.println("----------updateElementByIdAddIdBs()测试----------"); String upbyidrs = updateElementByIdAddIdBs(srcXml, nodeXml2, "10001"); System.out.println(upbyidrs); System.out.println("----------updateElementById()测试----------"); String upbyidrs1 = updateElementById(srcXml, nodeXml2, "10001"); System.out.println(upbyidrs1); System.out.println("----------removeNullIdElement()测试----------"); String rvnullrs = removeNullIdElement(srcXml, "/doc/person/adds"); System.out.println(rvnullrs); System.out.println("----------removeAllNullIdElement()测试----------"); ArrayList<String> xpathList = new ArrayList<String>(); xpathList.add("/doc/person/adds"); xpathList.add("/doc/other"); String rvallnullrs = removeAllNullIdElement(srcXml, xpathList); System.out.println(rvallnullrs); System.out.println("----------Dom4j生成一个xml测试----------"); Document doc = DocumentHelper.createDocument(); doc.addElement("root") .addElement("person").setText("haha:)"); System.out.println(doc.asXML()); } }程序中尽量避免用Dom4j之外的第三方类库,但是还用到了,可以修改一下:
1、用到Log4j的地方,可以修改log对象的实现为Java中的Logger工具:
private static Logger log = Logger.getLogger(XmlNodeHandler.class.getName());
2、用到apache的beanutils工具包中的StringUtils.isBlank()方法时候,可以改用JDK API String中的equel()方法做比较进行替换。具体操作很简单,我就不写了。
3、用到Sequence生成的Id的地方,我都改为java.util.Random类来实现,目的还是为了把眼光放到Dom的处理上。如果有博友对这个SequenceUtils工具类有兴趣,我可以把代码贴出去。
本处理器工具类涵盖Dom4j最常用部分80%以上的API。放到以方便查看。
发表评论
-
eclispe 实用插件大全
2016-03-31 10:17 838在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的 ... -
单点登录 SSO Session
2016-03-14 16:56 4056单点登录在现在的 ... -
通用权限管理设计 之 数据库结构设计
2016-01-26 13:22 2955通用权限管理设计 之 ... -
分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
2016-01-26 13:22 1495分享一个基于ligerui的系统应用案例ligerRM V2 ... -
通用权限管理设计 之 数据权限
2016-01-26 13:20 742通用权限管理设计 之 数据权限 阅读目录 前 ... -
使用RSA进行信息加密解密的WebService示例
2015-12-28 10:30 879按:以下文字涉及RS ... -
防止网站恶意刷新
2015-10-22 10:55 709import java.io.IOExcept ... -
单点登录
2015-10-19 14:24 764Cas自定义登录页面Ajax实现 博客分类: ... -
session如何在http和https之间同步
2015-09-14 09:25 2261首先说下 http>https>http ... -
基于 Quartz 开发企业级任务调度应用
2015-08-17 11:17 843Quartz 是 OpenSy ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2015-08-17 11:17 881今天来点实际工 ... -
Java加密技术(十)——单向认证
2015-08-13 10:13 685在Java 加密技术(九)中,我们使 ... -
Java加密技术(九)——初探SSL
2015-08-13 10:12 893在Java加密技术(八)中,我们模拟 ... -
Java加密技术(八)——数字证书
2015-08-13 10:12 892本篇的主要内容为Java证书体系的实 ... -
Java加密技术(七)——非对称加密算法最高级ECC
2015-08-13 10:12 975ECC ECC-Elliptic Curv ... -
Java加密技术(六)——数字签名算法DSA
2015-08-13 10:11 1063接下来我们介绍DSA数字签名,非对称 ... -
Java加密技术(五)——非对称加密算法的由来DH
2015-08-12 16:13 871接下来我们 ... -
Java加密技术(四)——非对称加密算法RSA
2015-08-12 16:11 1097接下来我们介绍典型的非对称加密算法—— ... -
Java加密技术(三)——PBE算法
2015-08-12 16:10 962除了DES,我们还知道有DESede( ... -
Java加密技术(二)——对称加密算法DES&AES
2015-08-12 16:09 721接下来我们介绍对称加密算法,最常用的莫 ...
相关推荐
4. 可扩展性:DOM4J允许用户自定义解析策略和处理器,以满足特定需求。 5. 支持XML Schema和DTD:能够验证XML文档是否符合预定义的模式或规范。 接下来,DOM4J 2.0.0-ALPHA是后续的一个实验性版本,引入了一些新...
* NodeFilter:定义了在 dom4j 节点中产生的一个滤镜或谓词的行为。 * ProcessingInstruction:定义 XML 处理指令。 * Text:定义 XML 文本节点。 * Visitor:用于实现 Visitor 模式。 * XPath:在分析一个字符串后...
《DOM4J:Java中的XML处理利器》 在Java编程中,XML(eXtensible Markup Language)作为一种数据交换和存储格式,广泛应用...通过深入理解和熟练运用DOM4J,开发者可以更好地驾驭XML世界,实现数据的灵活处理和传输。
Jaxen提供了一种统一的API,支持多种XML处理器,包括DOM4J。 2. `dom4j-1.6.1.jar`:这是DOM4J的主要库文件,包含了处理XML的所有功能。这个版本1.6.1是DOM4J的一个稳定版本,提供了许多特性,如读写XML文件、构建...
8. **事件处理**:如果需要在解析或操作XML时执行某些动作,可以注册监听器或处理器,DOM4J提供了相应的API。 9. **高级功能**:包括命名空间管理、DTD处理、实体引用、XML Schema支持等进阶话题。 10. **性能优化...
16. **Visitor**: 实现了访问者模式,允许对DOM4J树进行深度遍历,并在每个节点上执行特定的操作。 17. **XPath**: 提供了XPath表达式的查询能力,使得在复杂的数据结构中定位和提取数据变得更加容易。 #### 三、...
#### 四、Dom4j 的接口继承关系 为了更好地理解 Dom4j 的工作原理,我们需要了解它的接口继承关系。以下是部分关键接口的继承关系示意图: - `java.lang.Cloneable` → `org.dom4j.Node` - `org.dom4j.Attribute`...
2. **XPath支持**:DOM4J实现了XPath语言,允许开发者通过简洁的表达式来查询XML文档中的节点,大大简化了对XML数据的查找和操作。 3. **Element和Attribute对象**:DOM4J提供了Element和Attribute类,它们封装了...
3. **面向接口编程**:DOM4J遵循“面向接口编程”的原则,通过提供一系列接口而非具体实现类,增强了代码的可维护性和重用性。 4. **集成多种XML标准**:DOM4J同时支持DOM、SAX和JAXP,这意味着开发者可以根据实际...
- **Document对象**:代表整个XML文档,是DOM4J的根节点。 - **Element对象**:表示XML文档中的元素,可以包含属性、文本和子元素。 - **Attribute对象**:用于存储元素的属性。 - **Text对象**:表示元素中的...
4. **事件驱动编程**:DOM4J支持事件驱动的XML解析,可以注册事件处理器来响应XML解析过程中的特定事件,如元素开始、结束、文本节点发现等。 5. **文档操作**:DOM4J提供了创建、修改和删除XML文档节点的功能,...
13. **NodeFilter**: 定义节点过滤器,用于在DOM4J节点上应用条件筛选。 14. **ProcessingInstruction**: 定义XML处理指令,用于给处理器传递指令。 15. **Text**: 表示XML文本节点,包含纯文本内容。 16. **Visitor...
13. **NodeFilter**: 定义在DOM4J节点中产生的一个过滤器或谓词的行为。 14. **ProcessingInstruction**: 定义XML处理指令。 15. **Text**: 定义XML文本节点。 16. **Visitor**: 用于实现访问者模式。 17. **XPath**...
在dom4j库中,SAX解析器实现了SAX2接口,提供了一种高效且节省内存的方式解析XML。以下是使用dom4j进行SAX解析的基本步骤: 1. **引入依赖**:在项目中添加dom4j库,通常通过Maven或Gradle构建工具添加对应的依赖。...
13. `org.dom4j.ProcessingInstruction`: 定义XML处理指令,用于指导处理器如何处理文档的某些部分。 14. `org.dom4j.Text`: 代表XML的文本节点。 15. `org.dom4j.Visitor`: 实现Visitor模式,允许对XML树进行深度...
10. **Node**:`Node`是DOM4j中所有XML节点的基类,提供了统一的访问和操作方法,包括元素、属性、文本、注释等。 11. **NodeFilter**:`NodeFilter`定义了一个过滤器接口,允许你在遍历DOM4j树时根据特定条件筛选...
8. **事件处理**:DOM4J允许注册事件处理器,可以监听XML解析过程中的特定事件,如开始解析、遇到元素、结束解析等。 9. **性能优化**:DOM4J在设计时考虑了性能,例如通过延迟加载(lazy loading)减少内存占用,...