dom4j解析XML文件

1、先创建一个XML文件,例如test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<nodes>
		<node>
			<name value="测试" size="2" >PC_01</name>
			<address>192.168.1.100</address>
		</node>
		<node>
			<name>PC_02</name>
			<address>192.168.1.101</address>
		</node>
	</nodes>	
</root>

2、根据XML文件的内容创建一个Node.java类:

import java.util.Map;


public class Node {

	private String name;
	
	private String address;
	
	private Map<String, String> attr;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Map<String, String> getAttr() {
		return attr;
	}

	public void setAttr(Map<String, String> attr) {
		this.attr = attr;
	}
	
	@Override
	public String toString() {
		return "name = " + name + ", address = " + address;
	}
}
3、测试并解析XML文件到Node类中:

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultAttribute;


public class TestNode {
	List<Node> nodes;

	public static void main(String[] args) {
		String path = "xxx/test.xml";
		File file = new File(path);
		TestNode tn = new TestNode();
		try {
			tn.parse(file);
			
			for (Node n : tn.nodes) {
				System.out.println(n);
				for (Map.Entry<String, String> entry : n.getAttr().entrySet()) {
					System.out.println(entry.getKey() + "===>" + entry.getValue());
				}
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
     * 解析配置文件
     * @param xmlFile
     */
	private void parse(File file) 
    throws DocumentException {    
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(file);
        
        // 获取根元素
        Element topElement = document.getRootElement();
        // 获取根元素下的子元素
        Iterator<Element> childElements = topElement.elementIterator();
        while(childElements.hasNext()){
        	Element element = childElements.next();            
            if ("nodes".equals(element.getName())) {
            	// 解析Node配置定义
            	parseNode(element);
            }
        }
    }
	
	private void parse(InputStream ins) throws DocumentException {
		SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(ins);
        
        // 获取根元素
        Element topElement = document.getRootElement();
        // 获取根元素下的子元素
        Iterator<Element> childElements = topElement.elementIterator();
        while(childElements.hasNext()){
        	Element element = childElements.next();            
            if ("nodes".equals(element.getName())) {
            	parseNode(element);
            }
        }
	}
	
	/**
	 * 解析node配置定义
	 * @param elementInfo
	 */
	private void parseNode(Element elementInfo) {
		Iterator<Element> nodeElements = elementInfo.elementIterator();
		nodes = new ArrayList<Node>();
		while (nodeElements.hasNext()) {
			Element nodeElement = nodeElements.next();			
			Iterator<Element> clientChilds = nodeElement.elementIterator();
			Node node = new Node();
			Map<String, String> attr = new HashMap<String, String>();
			
			while (clientChilds.hasNext()) {
				Element nodeElementInfo = clientChilds.next();
				String name = nodeElementInfo.getName();
				String text = nodeElementInfo.getText();
				List list = nodeElementInfo.attributes();
				for (int i = 0; i < list.size(); i ++) {
					DefaultAttribute att = (DefaultAttribute) list.get(i);
					attr.put(att.getName(), att.getValue());
				}
				
				if ("name".equals(name)) {
					node.setName(text);
				} else if ("address".equals(name)) {
					node.setAddress(text);
				}
			}
			node.setAttr(attr);
			nodes.add(node);
		}
	}
}

最终打印结果:

name = PC_01, address = 192.168.1.100
value===>测试
size===>2
name = PC_02, address = 192.168.1.101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值