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 阅读(516) 评论(0) 编辑 收藏 举报