递归查找XML节点,如果节点属性符合要求,保留该节点以及所有父亲节点;如果节点以及子节点都不符合要求,全部删除。
package test.mytest;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XMLHandle {
private boolean walkChildElement = true;
private boolean exclusiveElement = true;
private boolean hasElement=true;
public String getXMLString(List<String> datalist) throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(Resources
.getResourceAsStream("list.xml"));
Element tElement = (Element) document.selectSingleNode("/root");
treeWalk(tElement, datalist);
return tElement.asXML();
}
private void treeWalk(Element element, List<String> datalist) {
for (int i = 0, size = element.nodeCount(); i < size; i++) {
walkChildElement = true;
exclusiveElement = true;
Node node = element.node(i);
if (node instanceof Element) {
Element childelement = (Element) node;
boolean hasContent = node.hasContent();
System.out.println(childelement.attribute("i").getValue());
for (String str : datalist) {
if (childelement.attribute(0).getValue().equals(str)) {
walkChildElement = false;
exclusiveElement = false;
}
}
if (walkChildElement && hasContent) {
treeWalk((Element) node, datalist);
}
if (exclusiveElement && !hasContent) {
System.out.println("!hasContent: "
+ childelement.attribute("i").getValue());
element.remove(childelement);
i--;
}
}
}
hasElement = element.hasContent();
if (element.isTextOnly()) {
hasElement = false;
}
if (!hasElement) {
//System.out.println("content: " + element.attribute("i").getValue());
if(!element.isRootElement()){
element.getParent().remove(element);
}
}
}
}
package test.mytest;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception {
List<String> datalist = new ArrayList<String>();
datalist.add("item1");
datalist.add("item2");
datalist.add("item3");
datalist.add("item4");
XMLHandle xmlHandle=new XMLHandle();
String xmlString=xmlHandle.getXMLString(datalist);
System.out.println(xmlString);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<root>
<n i="o1">
<n i="one1">
<n i="item1"></n>
<n i="item5"></n>
<n i="item6"></n>
<n i="item7"></n>
</n>
</n>
<n i="o2">
<n i="one2">
<n i="item8"></n>
<n i="item9"></n>
<n i="item10"></n>
<n i="item11"></n>
</n>
</n>
<n i="o3">
<n i="item3">
<n i="item8"></n>
<n i="item9"></n>
<n i="item10"></n>
<n i="item11"></n>
</n>
</n>
<n i="o4">
<n i="item">
<n i="item8"></n>
<n i="item4"></n>
<n i="item10"></n>
<n i="item11"></n>
</n>
</n>
</root>
分享到:
相关推荐
解析 XML 文件后,可以通过递归遍历 Document 对象构建 dom4j 树。 2. 获取节点 `Element` 对象提供了多种获取子节点的方法,如 `elementIterator()`, `elements()`, `childElement()` 等。 3. 获取属性 通过 `...
**DOM4J详解及其在Java中的应用** DOM4J是一个非常优秀的Java XML API,它提供了丰富的功能,使得处理XML文件变得简单而高效。这个库不仅仅是一个DOM实现,它还包含了SAX和DOM的支持,以及一些其他的特性,如XPath...
**DOM4J——Java框架技术详解** DOM4J是一个强大的Java XML处理库,它提供了全面的XML解决方案,包括解析、生成、操作和序列化XML文档。DOM4J因其易用性和高性能,在Java开发者中广受欢迎,是许多Java框架如Spring...
**DOM4J解析XML嵌套格式** XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档结构定义等领域。在Java编程中,DOM4J是一个非常流行的XML处理库,它提供了丰富的API来...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而灵活的API,使得XML的读取、创建、修改以及写入变得容易。在本文中,我们将深入探讨DOM4J库在XML处理中的核心概念和使用方法。 1. **DOM4J的基本概念...
**Dom4j 使用指南** Dom4j 是一个非常流行的Java库,用于处理XML文档。它提供了灵活、高效的方式来解析、创建、操作XML内容。对于学习XML的开发者来说,Dom4j是一个不可多得的工具,因为它的API简洁易用,功能强大...
DOM4J提供了便捷的方法来获取、设置和删除属性。 3. **文本(Text)**:XML文档中的文本内容由Text对象表示,可以通过DOM4J方便地访问和修改。 4. **文档(Document)**:整个XML文档由Document对象表示,它是所有元素...
2. 创建XML:DOM4J提供方便的方法来创建新的XML文档,或者在现有文档中添加、删除和修改元素、属性等。 3. XPath查询:DOM4J支持XPath表达式,可以快速定位XML文档中的特定部分。 4. 转换:DOM4J可以将XML文档转换为...
4. **强大的XML文档操作**:DOM4J支持动态创建XML文档,以及对已有文档进行修改、删除和添加元素。 **XML解析的基本流程** 1. **解析XML文件**:首先,使用DOM4J的`DocumentBuilderFactory`创建`DocumentBuilder`...
DOM4j是一个流行的Java库,专门用于处理XML文档。它提供了灵活且高性能的方式来解析、创建、操作和遍历XML结构。DOM4j API文档是学习和掌握这个库的关键资源,包含详细的方法解释、示例代码以及最佳实践。下面将深入...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高性能的方式来解析、创建、更新和操作XML。在本文中,我们将深入探讨如何利用DOM4J进行XML文件的读取、写入和修改操作。 一、XML基础 XML...
**标题解析:** "Dom4J解析XML" 这个标题明确指出了我们要讨论的核心技术——使用Dom4J库来解析XML文档。Dom4J是一个Java库,它提供了丰富的API来处理XML,包括读取、写入、修改以及查询XML文档。在本文中,我们将...
4. **递归调用**: 当遇到元素节点时,通过递归调用`node`方法来处理其子节点列表。 #### 结论 通过递归遍历DOM树形结构是一种有效且直观的方式,可以确保所有节点被正确地访问和处理。上述Java示例展示了如何实现...
在Java编程中,处理XML文档时,dom4j是一个非常流行的库,它提供了强大的XML处理功能,包括读取、创建、修改和解析XML文档。本文将深入探讨dom4j库在XML修改中的应用。 首先,dom4j库的核心概念是Document对象,它...
DOM4J是Java中一个流行的XML处理库,它提供了丰富的API来操作XML文档,包括读取、写入、修改和遍历XML文档。在这个实例中,我们将深入探讨如何利用DOM4J库来读取XML文件。 首先,我们需要了解DOM4J的基本概念。DOM4...
1. 引入DOM4j库:在Java项目中,你需要添加DOM4j的依赖,通常通过Maven或Gradle来管理。 2. 创建SAXReader对象:这是用于读取XML文件的类,可以通过其read方法加载XML文档。 3. 解析XML:SAXReader会返回一个...
这个“xml-dom4j解析工具类”显然是为了简化XML文档操作而设计的,它利用DOM4J库来处理XML数据。 首先,让我们详细了解一下DOM4J的核心概念。DOM4J提供了一个灵活的API,以树形结构表示XML文档。在DOM(Document ...
对于更复杂的XML处理需求,DOM4J提供了丰富的API,包括XPath查询、元素和属性的添加、删除、修改等。 总的来说,DOM4J是Java开发中处理XML文档的一个强大工具,它的易用性和灵活性使得开发者可以更专注于业务逻辑,...
如果你需要对XML进行更复杂的操作,如添加、删除或修改元素和属性,DOM4J库提供了丰富的API来支持这些功能。例如,你可以使用`Element`对象的方法来访问和修改其子元素、属性或者文本内容。同时,DOM4J也支持XPath...
5. 修改XML:DOM4J也支持对XML文档进行修改,包括添加、删除和更新元素及属性。例如,添加新元素: ```java Element newElement = DocumentHelper.createElement("newElement"); newElement.setText("New Content...