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