您的位置:首页 > 其它

递归遍历所有xml的节点及子节点

2015-08-06 16:22 531 查看
遍历所有xml的节点及子节点,dom4j

package test.floatd;

import java.io.File;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 遍历xml所有节点(包括子节点下还有子节点多层嵌套)
 */
public class TestXML {

	public static void main(final String[] args) {
		final TestXML test = new TestXML();
		try {
			test.testGetRoot();
		} catch (final Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 获取文件的xml对象,然后获取对应的根节点root
	 */
	public void testGetRoot() throws Exception {
		final SAXReader sax = new SAXReader();// 创建一个SAXReader对象
		final File xmlFile = new File("C:\\Users\\.yang\\Desktop\\ss.xml");// 根据指定的路径创建file对象
		final Document document = sax.read(xmlFile);// 获取document对象,如果文档无节点,则会抛出Exception提前结束
		final Element root = document.getRootElement();// 获取根节点
		getNodes(root);// 从根节点开始遍历所有节点

	}

	/**
	 * 从指定节点Element node开始,递归遍历其所有子节点
	 */
	public void getNodes(final Element node) {
		System.out.println("-------开始新节点-------------");

		// 当前节点的名称、文本内容和属性
		System.out.println("当前节点名称:" + node.getName());// 当前节点名称
		System.out.println("当前节点的内容:" + node.getTextTrim());// 当前节点内容
		final List<Attribute> listAttr = node.attributes();// 当前节点的所有属性
		for (final Attribute attr : listAttr) {// 遍历当前节点的所有属性
			final String name = attr.getName();// 属性名称
			final String value = attr.getValue();// 属性的值
			System.out.println("属性名称:" + name + "---->属性值:" + value);
		}

		// 递归遍历当前节点所有的子节点
		final List<Element> listElement = node.elements();// 所有一级子节点的list
		for (final Element e : listElement) {// 遍历所有一级子节点
			getNodes(e);// 递归
		}
	}
}


xml:

<?xml version="1.0" encoding="UTF-8"?>

<root comment="ss" simversion="3.0">
<container comment="container_1" type="node">
    <variable address="1"  type="readOnly"/>
	<container comment="container1_1"  type="node">
		<variable address="2"  type="readOnly"/>
		<container comment="container1_1_1"  type="node">
			<variable address="3"  type="readOnly"/>
		</container>
	</container>
</container>
<container comment="container_2"  type="node">
    <variable address="4"  type="readOnly"/>
	<container comment="2_1"  type="node">
		<variable address="5"  type="readOnly"/>
	</container>
	<container comment="2_2"  type="node">
		<variable address="6"  type="readOnly"/>
		<variable address="7"  type="readOnly"/>
		<container comment="2_2_1"  type="node">
			<variable address="8"  type="readOnly"/>
			<variable address="9"  type="readOnly"/>
		</container>
	</container>
</container>

</root>


over。

输出:

-------开始新节点-------------

当前节点名称:root

当前节点的内容:

属性名称:comment---->属性值:ss

属性名称:simversion---->属性值:3.0

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:container_1

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:1

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:container1_1

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:2

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:container1_1_1

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:3

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:container_2

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:4

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:2_1

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:5

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:2_2

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:6

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:7

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:container

当前节点的内容:

属性名称:comment---->属性值:2_2_1

属性名称:type---->属性值:node

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:8

属性名称:type---->属性值:readOnly

-------开始新节点-------------

当前节点名称:variable

当前节点的内容:

属性名称:address---->属性值:9

属性名称:type---->属性值:readOnly

其他dom4j见/article/1788436.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: