这两天光折腾xml的操作了。因为xml已知,所以觉得多套几个for就完了,可昨天晚上脑袋被套住出不来了。有时候实在没思路的时候,睡觉或许是个比较好的选择,今天一下茅塞顿开,还是写了个迭代,虽然现在仍然不能领会迭代的精髓,但还是想先和大家分享成果。代码如下:
依然用的是dom4j
XmlTree.java
package com.dianzi.test;
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class XmlTree {
/**
* @param args
*/
public static void main(String[] args) {
File file = new File("./src/com/dianzi/test/Log-Sample01.xml");
SAXReader saxReader = new SAXReader();
saxReader.setValidation(false);// 不验证xml文件内的dtd
try {
Document doc = saxReader.read(file);
System.out.println(doc);
XmlTree xml = new XmlTree();
xml.printXMLTree(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
public void printXMLTree(Document doc) {
Element root = doc.getRootElement();
List arr = new ArrayList();
List result = printElement(root, 1, arr);// 根节点深度为1
return;
}
/**
* 遍历标签元素的迭代方法
*
* @param element
* 标签元素
* @param level
* 元素深度
* @param resultList
* 遍历的结果
* @return 返回resultList
*/
@SuppressWarnings("unchecked")
private List printElement(Element element, Integer level, List resultList) {
/**
* 每一个tempList包含四个元素
*
* @get(0):记录元素名称,即打印<A>B</A>的A
* @get(1):打印该标签的值,即打印<A>B</A>的B
* @get(2):元素深度
* @get(3):元素的属性及对应值列表,即<A c=“d” >B</A>=》attrObjList.get(0)存c
* =》attrObjList.get(1)存d
*/
List tempList = new ArrayList(4);
tempList.add(element.getQualifiedName());// 记录元素名称,即打印<A>B</A>的A
tempList.add(element.getText());// 打印该标签的值,即打印<A>B</A>的B
// 打印标签值不能放在下面的if中,可能第二层就有值,如<root><A>B</A></root>
tempList.add(level);// 元素深度;
Iterator eleAttriItor = element.attributeIterator();
if (eleAttriItor.hasNext()) {// 元素有参数的,遍历参数的个数
List attrObjList = new ArrayList(element.attributes().size());
while (eleAttriItor.hasNext()) {
Attribute eleAttr = (Attribute) eleAttriItor.next();
List attrObj = new ArrayList(2);
attrObj.add(eleAttr.getName());
attrObj.add(eleAttr.getValue());
attrObjList.add(attrObj);
}
tempList.add(attrObjList);
} else {
// 没参数的
}
resultList.add(tempList);
// 迭代
for (Iterator iter = element.elementIterator(); iter.hasNext();) {
Element sub = (Element) iter.next();
printElement(sub, level+1, resultList);//深度加一
}
return resultList;
}
}
Log-Sample01.xml
<?xml version="1.0" encoding="gb2312"?>
<students>
<student age="25" leader="学院领导"><!--如果没有age属性,默认的为20-->
男,1982年生,硕士,现就读于北京邮电大学
</student>
<student>
<name>cwb</name>
<college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->
<telephone>62358888</telephone>
<notes>男,1987年生,硕士,现就读于中国农业大学</notes>
</student>
<student age="45">
<name>xxxxx</name>
<college leader="">xxx学院</college>
<telephone>66666666</telephone>
<notes>注视中,注释中</notes>
</student>
<student age="">
<name>lxx</name>
<college>yyyy学院</college>
<telephone>88888888</telephone>
<notes>注视中111,注释中222</notes>
</student>
</students>
分享到:
相关推荐
在本主题“DOM遍历所有XML节点,并且重新生成XML”中,我们将深入探讨如何利用DOM API遍历XML文档的所有节点,并根据需求重新构建XML文档。 首先,让我们了解XML的基本结构。XML(eXtensible Markup Language)是一...
2. **遍历XML节点**:库提供了遍历XML文件所有节点的功能,这是通过递归地访问XML元素的子节点来实现的。例如,可以使用`FirstChildElement()`和`NextSiblingElement()`方法来遍历所有的子元素。 3. **添加、删除和...
C#对XML文件进行增删查改,并提供了遍历XMl文件信息的方法包括1.生成xml文件、2.遍历xml文件的节点信息、3.修改xml文件的节点信息、4.向xml文件添加节点信息...删除指定xml文件的节点信息、6、嵌套循环遍历xml信息节点
遍历XML文档通常涉及对XML树结构的递归访问。你可以从根节点开始,逐层访问每个节点及其子节点。CMakup类的`GetFirstChild`和`GetNextSibling`函数在这里非常有用,它们分别用于获取当前节点的第一个子节点和下一个...
使用W3C DOM,开发者可以遍历XML文档中的各个元素,并对其进行读取、修改或删除。DOM解析器把XML文档转换成树状结构(DOM tree),每个节点代表XML文档中的一个部分。通过节点可以进行一系列操作,比如访问节点、...
这些属性和方法是DOM的核心组成部分,它们使得开发者能够方便地构建、修改和查询XML文档。通过结合使用这些工具,可以实现诸如检索特定元素、遍历文档结构、创建新元素以及更新现有元素的值等多种功能。在实际开发中...
换句话说:XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。 模块简介: 1、XMLDOMDocument类: XML对象文档 ->操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的...
解析完成后,你可以通过QDomDocument的元素方法访问XML文档的根节点,并遍历整个文档结构。QDomElement类表示XML文档中的元素节点,而QDomNode类是所有节点类型的基类,包括元素、文本、注释等。 接下来,我们来看...
3. **使用VDT-XML修改XML** - 添加、删除和更新元素:VDT-XML提供了API,允许开发者添加新元素,删除现有元素,或者修改元素的属性和文本内容。 - 遍历XML树:通过迭代器或递归函数,可以遍历XML树并进行修改。 -...
// 遍历XML文件 XmlNodeList nodeList = xmlDoc.GetElementsByTagName("*"); foreach (XmlNode node in nodeList) { Console.WriteLine(node.Name + ": " + node.InnerText); } ``` ### 增加XML节点 在C#中,我们...
7. **XML DOM操作**:如果使用XMLDOMDocument,还可以进行更复杂的DOM操作,如添加、修改或删除XML节点。例如,使用`CreateElement`, `AppendChild`等方法。 8. **保存XML**:完成数据处理后,可能需要将修改后的...
# 遍历XML结构 for child in root: print(child.tag, child.attrib) # 获取特定节点的值 value = root.find('.//someTag').text print('Value:', value) ``` 这段代码解析XML文件,遍历所有顶级节点,并打印它们...
XML 文件操作(修改、新增、删除、插入) XML 文件(Extensible Markup Language)是一种常用的数据交换格式,广泛应用于数据存储、网络通信等领域。在 C# 中,操作 XML 文件可以使用 XmlDocument 类,该类提供了...
2. **遍历XML树**:通过`FirstChildElement()`, `NextSiblingElement()`, `Attribute()`等方法遍历元素和属性。 3. **操作XML**:创建新元素、添加或删除元素和属性,修改文本内容。 4. **保存XML**:调用`...
总之,C++中使用CMarkup库通过递归法遍历XML文档,可以高效且灵活地处理XML数据。理解XML的结构以及CMarkup库的API,对于进行XML解析和操作至关重要。这种方法虽然在网上可能不常见,但对于理解和掌握XML处理技巧...
本文将深入探讨dom4j库在XML修改中的应用。 首先,dom4j库的核心概念是Document对象,它代表了一个完整的XML文档。通过DOM4J,我们可以方便地创建和操作Element、Attribute、Namespace等XML元素。以下是一些主要...
3. **遍历XML**:通过`FirstChildElement`、`NextSiblingElement`等方法遍历XML树,访问和修改元素及属性。 4. **保存修改**:如果修改了XML,可以调用`SaveFile`方法将更改写回文件。 5. **释放资源**:操作完成...
本文档旨在介绍 PHP 对 XML 文档的基本操作,包括创建 XML 文档、遍历 XML 文档、添加 XML 数据、修改 XML 数据和删除 XML 数据。 创建 XML 文档 要创建 XML 文档,需要使用 PHP 的 DOMDocument 类。首先,创建一...
在处理XML文档时,有时我们需要根据需求删除特定的节点。XML是一种可扩展标记语言,用于存储和传输数据,它的结构化特性使得数据组织有序且易于处理。本文将深入讲解如何在编程环境中删除XML根节点下的特定子节点,...
通过遍历这个树形结构,我们可以访问和修改XML文档的任何部分。 "可添加删除修改xml节点"则意味着我们需要具备对DOM树进行操作的能力。添加节点涉及创建新的DOM节点,并将其插入到适当的位置;删除节点则需要找到...