1、导入Document 依赖
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency>
2、Document 基本方法使用
// xml字符串解析为Document对象
Document document = DocumentHelper.parseText(xmlStr);
// 读取xml文件并解析为Document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("./src/xxx.xml"));
// 获取文档根节点
Element root = document.getRootElement();
// 获取根节点下指定节点
Element contactElem = root.element("process");
// 获取子节点下面的指定节点
Element boyElem = contactElem.element("boy");
// 输出根标签的名字
System.out.println(root.getName());
// 获取根节点下面的所有子节点(不包过子节点的子节点)
List<Element> list = root.elements();
list.forEach(element -> {
System.out.println(element.getName());
// 获取子节点下面的所有子节点
List<Element> chi = element.elements();
});
// 为节点添加子节点
Element addElement = boyElem.addElement("flowable:taskListener");
// 为子节点添加属性
addElement.addAttribute("event", "create");
addElement.addAttribute("event1", "create1");
// 将Document对象转换为xml字符串
document.asXML();
3、Document 使用实例
/**
* 添加监听器
*
* @param xmlStr
*/
private String addMonitor(String xmlStr) throws DocumentException {
// 读取xml文件并解析为Document对象
// SAXReader reader = new SAXReader();
// Document document = reader.read(new File("./src/xxx.xml"));
Document document = DocumentHelper.parseText(xmlStr); // xml字符串解析为Document对象
// 获取文档根节点
Element root = document.getRootElement();
// 获得指定节点下面的子节点
Element contactElem = root.element("process");// 获取根节点下的process子节点
List<Element> contactList = contactElem.elements(); // 获取process子节点下的所有子节点
contactList.forEach(e -> {
System.out.println(e.getName());
if ("userTask".equals(e.getName())) { // 找到等于userTask的节点下面的所有子节点
List<Element> list1 = e.elements();
list1.forEach(element -> {
if ("extensionElements".equals(element.getName())) { //得到想要的节点 并在之下添加子节点和属性
Element addElement = element.addElement("flowable:taskListener");
addElement.addAttribute("class", "com.mdx.it.bpm.flowable.handler.UserTaskListener");
addElement.addAttribute("event", "create");
addElement.addAttribute("id", "id-" + StringUtils.getRandomNumber(13));
}
});
}
if ("endEvent".equals(e.getName())) { // 找到等于endEvent的节点
AtomicBoolean flag = new AtomicBoolean(true);
List<Element> list1 = e.elements();
list1.forEach(element -> {
if ("extensionElements".equals(element.getName())) { //得到想要的节点 并在之下添加子节点和属性
Element addElement = element.addElement("flowable:executionListener");
addElement.addAttribute("class", "com.mdx.it.bpm.flowable.handler.ProcessEndListener");
addElement.addAttribute("event", "end");
flag.set(false);
}
});
// 可能不存在extensionElements节点的时候
if (flag.get()) {
Element addElement = e.addElement("bpmn2:extensionElements");
Element endElement = addElement.addElement("flowable:executionListener");
endElement.addAttribute("class", "com.mdx.it.bpm.flowable.handler.ProcessEndListener");
endElement.addAttribute("event", "end");
}
}
});
// System.out.println(document.asXML());
return document.asXML();
}
版权声明:本文为qq_38374397原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。