zoukankan      html  css  js  c++  java
  • 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("根元素的属性为:	");
    		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()+"	");
    			
    		}
    	}
    
    	//解析返回一个文档对象
    	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 即可

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275578.html
Copyright © 2011-2022 走看看