zoukankan      html  css  js  c++  java
  • 使用dom4j解析XML例子

    包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), TestDom4jReadExmple.java(测试解析的结果)

    代码运行前需先导入dom4j架包。

    studentInfo.xml文件(该文件放在本项目目录下)内容如下:

    <?xml version="1.0" encoding="gb2312"?>
    <students>
        <student age="25"><!--如果没有age属性,默认的为20-->
            <name>崔卫兵</name>
            <college>PC学院</college>
            <telephone>62354666</telephone>
            <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
        </student>
        <student>
            <name>cwb</name>
            <college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->
            <telephone>62358888</telephone>
            <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
        </student>
        <student age="45">
            <name>xxxxx</name>
            <college leader="">xxx学院</college>
            <telephone>66666666</telephone>
            <notes>注视中,注释中</notes>
        </student>
        <student age="">
            <name>lxx</name>
            <college>yyyy学院</college>
            <telephone>88888888</telephone>
            <notes>注视中111,注释中222</notes>
        </student>
    </students>
    

    Dom4jReadExmple.java类代码如下:

    import java.io.File;
    import java.util.HashMap;
    import java.util.Iterator;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    /**
     * 利用dom4j进行XML编程
     * 
     * @author henuyuxiang
     * @since 2014.7.11
     */
    public class Dom4jReadExmple {
    	/**
    	 * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中
    	 * 
    	 * @param filename
    	 *            String 待遍历的XML文件(相对路径或者绝对路径)
    	 * @param hm
    	 *            HashMap
    	 *            存放遍历结果,格式:<nodename,nodevalue>或者<nodename+attrname,attrvalue>
    	 */
    	public void iterateWholeXML(String filename, HashMap<String, String> hm) {
    		SAXReader saxReader = new SAXReader();
    		try {
    			Document document = saxReader.read(new File(filename));
    			Element root = document.getRootElement();
    			// 用于记录学生编号的变量
    			int num = -1;
    			// 遍历根结点(students)的所有孩子节点(肯定是student节点)
    			for (@SuppressWarnings("rawtypes")
    			Iterator iter = root.elementIterator(); iter.hasNext();) {
    				Element element = (Element) iter.next();
    				num++;
    				// 获取person节点的age属性的值
    				Attribute ageAttr = element.attribute("age");
    				if (ageAttr != null) {
    					String age = ageAttr.getValue();
    					if (age != null && !age.equals("")) {
    						hm.put(element.getName() + "-" + ageAttr.getName()
    								+ num, age);
    					} else {
    						hm.put(element.getName() + "-" + ageAttr.getName()
    								+ num, "20");
    					}
    				} else {
    					hm.put(element.getName() + "-age" + num, "20");
    				}
    				// 遍历student结点的所有孩子节点(即name,college,telphone,notes),并进行处理
    				for (@SuppressWarnings("rawtypes")
    				Iterator iterInner = element.elementIterator(); iterInner
    						.hasNext();) {
    					Element elementInner = (Element) iterInner.next();
    					if (elementInner.getName().equals("college")) {
    						hm.put(elementInner.getName() + num,
    								elementInner.getText());
    						// 获取college节点的leader属性的值
    						Attribute leaderAttr = elementInner.attribute("leader");
    						if (leaderAttr != null) {
    							String leader = leaderAttr.getValue();
    							if (leader != null && !leader.equals("")) {
    								hm.put(elementInner.getName() + "-"
    										+ leaderAttr.getName() + num, leader);
    							} else {
    								hm.put(elementInner.getName() + "-"
    										+ leaderAttr.getName() + num, "leader");
    							}
    						} else {
    							hm.put(elementInner.getName() + "-leader" + num,
    									"leader");
    						}
    					} else {
    						hm.put(elementInner.getName() + num,
    								elementInner.getText());
    					}
    				}
    			}
    
    		} catch (DocumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    TestDom4jReadExmple.java类代码如下:

    package demo1;
    
    import java.util.HashMap;
    
    /**
     * 测试Dom4jReadExmple解析的情况
     * 
     * @author henuyuxiang
     * @since 2014.7.11
     */
    public class TestDom4jReadExmple {
    	public static void main(String[] args) {
    		try {
    			// 获取解析完后的解析信息
    			HashMap<String, String> hashMap;
    			Dom4jReadExmple drb = new Dom4jReadExmple();
    			// 遍历整个XML文件
    			hashMap = new HashMap<String, String>();
    			drb.iterateWholeXML("studentInfo.xml", hashMap);
    			System.out.println("姓名	年龄	学院	学院领导	电话	备注");
    			for (int i = 0; i < hashMap.size(); i += 6) {
    				int j = i / 6;
    				System.out.print(hashMap.get("name" + j) + "	");
    				System.out.print(hashMap.get("student-age" + j) + "	");
    				System.out.print(hashMap.get("college" + j) + "	");
    				System.out.print(hashMap.get("college-leader" + j) + "	");
    				System.out.print(hashMap.get("telephone" + j) + "	");
    				System.out.println(hashMap.get("notes" + j) + "	");
    			}
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    	}
    }
    

    运行结果如下图所示:

  • 相关阅读:
    数据库客户端工具Oracle SQL Developer
    Win7系统下搭建FTP
    Apache 中httpd.conf文件配置详解(转载)
    Apache启动报错Address already in use: make_sock: could not bind to...
    QTP如何准确识别Dialog中的对象
    【Apache系列】linux下Apache的常用操作
    【Apache系列】Windows下作为应用程序运行Apache
    【QTP专题】05_参数化之Excel
    CSS伪类before,after制作左右横线中间文字效果
    干货!所有常用的原型设计工具都在这里了
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/3837284.html
Copyright © 2011-2022 走看看