dom4j之根元素、XPATH两种方式读取xml文档

来源:互联网 发布:超级女声2016网络海选 编辑:程序博客网 时间:2024/05/03 17:29

    前一篇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 stubcreateXml("stus.xml");//使用根节点的方式获取节点元素readXmlNode("stus.xml");System.out.println("-----------------------------XPATH获取元素----------------");//使用xpath的方式读取元素readXPathNode("stus.xml");}//以xpath的方式获取元素private static void readXPathNode(String path) {// TODO Auto-generated method stubDocument 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 stubfor (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 stubDocument 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 stubSAXReader reader=new SAXReader();Document document=null;try {document=reader.read(new File(path));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return document;}//创建xml文件private static void createXml(String path) {// TODO Auto-generated method stubDocument 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 blocke.printStackTrace();}}//创建documentprivate static Document createDocument() {// TODO Auto-generated method stubDocument document=DocumentHelper.createDocument();//在document中创建根元素studentsElement 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:2student元素name元素,值为刘德华age元素type:intage元素,值为28student元素name元素,值为黎明age元素,值为54-----------------------------XPATH获取元素----------------student元素name元素,值为刘德华age元素type:intage元素,值为28student元素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 即可

0 0
原创粉丝点击