dom4j之根元素、XPATH两种方式读取xml文档
前一篇dom4j的文章 http://blog.csdn.net/undergrowth/article/details/12146003
现在使用两种方式进行读取xml文档
1.根元素获取下一节点的方式
2.xpath路径的方式
不多说 东西都在代码里了 需要注释的地方以注释
package com.undergrowth.dom4j;
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4j_Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
createXml("stus.xml");
//使用根节点的方式获取节点元素
readXmlNode("stus.xml");
System.out.println("-----------------------------XPATH获取元素----------------");
//使用xpath的方式读取元素
readXPathNode("stus.xml");
}
//以xpath的方式获取元素
private static void readXPathNode(String path) {
// TODO Auto-generated method stub
Document document=parseXmlDocument(path);
//获取student元素
List stuList=document.selectNodes("//student");
iteratorListElement(stuList);
//获取特定的元素
System.out.println("---------获取特定元素-------");
List<Attribute> ageList=document.selectNodes("//age/@type");
iteratorListAttribute(ageList);
}
//迭代列表属性
private static void iteratorListAttribute(List<Attribute> ageList) {
// TODO Auto-generated method stub
for (Attribute object : ageList) {
System.out.println(object.asXML());
}
}
//迭代列表元素
private static void iteratorListElement(List stuList) {
for (Iterator iterator = stuList.iterator(); iterator.hasNext();) {
Element stuElement = (Element) iterator.next();
iteratorAttribute(stuElement);
iteratorNextElement(stuElement);
}
}
//使用根节点的方式获取元素
private static void readXmlNode(String path) {
// TODO Auto-generated method stub
Document document=parseXmlDocument(path);
Element rootElement=document.getRootElement();
//遍历根元素的属性集合
//System.out.print("根元素的属性为:\t");
iteratorAttribute(rootElement);
//System.out.println();
//遍历根元素的子元素
for (Iterator iterator = rootElement.elementIterator("student"); iterator.hasNext();) {
Element stuElement = (Element) iterator.next();
System.out.println(stuElement.getName()+"元素");
//遍历元素的下一级元素
iteratorNextElement(stuElement);
}
}
//迭代当前元素的下一级所有元素
private static void iteratorNextElement(Element stuElement) {
Iterator iterator2=stuElement.elementIterator();
while (iterator2.hasNext()) {
Element nextElement = (Element) iterator2.next();
//判断元素是否有属性
if(nextElement.attributeCount()!=0){
iteratorAttribute(nextElement);
}
System.out.println(nextElement.getName()+"元素"+",值为"+nextElement.getText());
}
}
//迭代元素的属性
private static void iteratorAttribute(Element rootElement) {
System.out.println(rootElement.getName()+"元素");
for (Iterator iterator = rootElement.attributeIterator(); iterator.hasNext();) {
Attribute type = (Attribute) iterator.next();
System.out.println(type.getName()+":"+type.getText()+"\t");
}
}
//解析返回一个文档对象
private static Document parseXmlDocument(String path) {
// TODO Auto-generated method stub
SAXReader reader=new SAXReader();
Document document=null;
try {
document=reader.read(new File(path));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return document;
}
//创建xml文件
private static void createXml(String path) {
// TODO Auto-generated method stub
Document document=createDocument();
writeXml(path,document);
}
//将document写入到输出文件中
private static void writeXml(String path, Document document) {
// TODO Auto-generated method stub
//为输出流创建格式
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter writer=null;
try {
writer = new XMLWriter(new FileWriter(path), format);
//将document写入到文件中
writer.write(document);
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//创建document
private static Document createDocument() {
// TODO Auto-generated method stub
Document document=DocumentHelper.createDocument();
//在document中创建根元素students
Element rootElement=document.addElement("students");
rootElement.addAttribute("name", "基础与信息工程学院");
rootElement.addComment("人数总数");
rootElement.addAttribute("count", "2");
//添加student信息
Element stuElement=rootElement.addElement("student");
stuElement.addElement("name").addText("刘德华");
stuElement.addElement("age").addAttribute("type", "int").addText("28");
//添加student信息
Element stuElement2=rootElement.addElement("student");
stuElement2.addElement("name").addText("黎明");
stuElement2.addElement("age").addText("54");
return document;
}
}
结果
students元素 name:基础与信息工程学院 count:2 student元素 name元素,值为刘德华 age元素 type:int age元素,值为28 student元素 name元素,值为黎明 age元素,值为54 -----------------------------XPATH获取元素---------------- student元素 name元素,值为刘德华 age元素 type:int age元素,值为28 student元素 name元素,值为黎明 age元素,值为54 ---------获取特定元素------- type="int"
错误
-----------------------------XPATH获取元素----------------
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
at com.undergrowth.dom4j.Dom4j_Test.readXPathNode(Dom4j_Test.java:40)
at com.undergrowth.dom4j.Dom4j_Test.main(Dom4j_Test.java:32)
Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 5 more
添加 jaxen-1.1-beta-6.jar 即可
posted on 2014-04-13 22:57 liangxinzhi 阅读(529) 评论(0) 收藏 举报
浙公网安备 33010602011771号