生成和解析如下XML所需Java实例:
xml:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user age="18">
<name>Simon</name>
<pass>123456</pass>
</user>
<user age="22">
<name>Lucifer</name>
<pass>654321</pass>
</user>
</users>
Java生成代码如下:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Demo{
public String generateDocument() {
Document document = DocumentHelper.createDocument();
Element users = document.addElement("users");//添加users标签
Element user1 = users.addElement("user");//添加user标签
Element name1 = user.addElement("name");//添加name标签
Element pass1 = user.addElement("pass");//添加pass标签
user1.addAttribute("age","18");//为user添加属性age
name1.setText("Simon");//为name标签添加内容
pass1.setText("123456");//为pass标签添加内容
Element user2 = users.addElement("user");//添加user标签
Element name2 = user.addElement("name");//添加name标签
Element pass2 = user.addElement("pass");//添加pass标签
user2.addAttribute("age","22");//为user添加属性age
name2.setText("Lucifer");//为name标签添加内容
pass2.setText("654321");//为pass标签添加内容
return document.asXML();//返回生成的XML文档(String类型)
}
}
Java解析代码如下:
public void resolveDocument(String xml) throws DocumentException {
try {
Document document = DocumentHelper.parseText(xml);//根据传入的XML字符串获取文档
Element users = document.getRootElement();//根据文档获取根标签users
for (Iterator iter = users.elementIterator(); iter.hasNext(); ) {//生成迭代器,遍历users下所有节点
Element user = (Element) iter.next();//获取到子节点user
System.out.println("The age of this user is " + user.attributeValue("age"));//获取子节点user的age属性
for (Iterator it = user.elementIterator(); it.hasNext(); ) {//生成迭代器,遍历user下所有节点
//获取当前节点及其内容
Element element = (Element) it.next();
String tag = element.getName();//获取当前标签名称
Object value1 = element.getData();//获取当前名称的值
String value2 = element.getStringValue();
String value3 = element.getText();
if ("name".equals(tag))
System.out.println("UserName is " + value1);
else
System.out.println("UserPass is " + value1);
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
tips:
1、不要忘记添加DOM4J的相关JAR包和依赖包
2、XML传入途径有很多,可自行进行优化,注意相关Exception的添加即可。
3、 getData();getStringValue();getText();的区别在此赘述一下:
1)getData()是获取Object类型的结果,可自由转化成想要的类(Integer、String等)
2)getStringValue()和getText()区别就是一个是获取当前节点的内容,一个是获取当前节点及其子节点的内容,例如本例子中,user.getStringValue()输出为空 而 user.getText() 输出为 Simon123456。user.getData()输出同getStringValue()。
Hope Can Help!