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 即可

  • 相关阅读:
    distroless 镜像介绍及调试基于distroless 镜像的容器
    C# 设置或验证 PDF中的文本域格式 E
    Java 在PDF中添加工具提示|ToolTip E
    MongoDB Security
    Spring Boot MongoDB
    MongoDB 安装
    nginx重试机制proxy_next_upstream
    (转)VC中等比例缩放图像
    5 Ways You can Learn Programming Faster
    如何批量去除文件名中的某些字符串?
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275578.html
Copyright © 2011-2022 走看看