dom4j解析XML
来源:互联网 发布:李敖小s知乎 编辑:程序博客网 时间:2024/05/17 19:59
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
package dom4jExample.read;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 cuiweibing * @since 2007.8.10 */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 ( 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 ( 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 dom4jExample.read;import java.util.HashMap;/** * 测试Dom4jReadExmple解析的情况 * @author cuiweibing * @since 2007.8.10 */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("姓名/t年龄/t学院/t学院领导/t电话/t/t备注"); for(int i=0;i<hashMap.size();i+=6){ int j=i/6; System.out.print(hashMap.get("name"+j)+"/t"); System.out.print(hashMap.get("student-age"+j)+"/t"); System.out.print(hashMap.get("college"+j)+"/t"); System.out.print(hashMap.get("college-leader"+j)+"/t"); System.out.print(hashMap.get("telephone"+j)+"/t"); System.out.println(hashMap.get("notes"+j)+"/t"); } }catch(Exception ex){ ex.printStackTrace(); } }}运行结果
姓名 年龄 学院 学院领导 电话 备注
崔卫兵 25 PC学院 leader 62354666 男,1982年生,硕士,现就读于北京邮电大学
cwb 20 PC学院 学院领导 62358888 男,1987年生,硕士,现就读于中国农业大学
xxxxx 45 xxx学院 leader 66666666 注视中,注释中
lxx 20 yyyy学院 leader 88888888 注视中111,注释中222
附:主要接口都在org.dom4j这个包里定义:
Attribute
Attribute定义了XML的属性
Branch
Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,
CDATA
CDATA 定义了XML CDATA 区域
CharacterData
CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.
Comment
Comment 定义了XML注释的行为
Document
定义了XML文档
DocumentType
DocumentType 定义XML DOCTYPE声明
Element
Element定义XML 元素
ElementHandler
ElementHandler定义了 Element 对象的处理器
ElementPath
被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity
Entity定义 XML entity
Node
Node为所有的dom4j中XML节点定义了多态行为
NodeFilter
NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction
ProcessingInstruction 定义 XML 处理指令.
Text
Text 定义XML 文本节点.
Visitor
Visitor 用于实现Visitor模式.
XPath
XPath 在分析一个字符串后会提供一个XPath 表达式
要想弄懂这套接口,关键的是要明白接口的继承关系:
interface java.lang.Cloneable
interface org.dom4j.Node
interface org.dom4j.Attribute
interface org.dom4j.Branch
interface org.dom4j.Document
interface org.dom4j.Element
interface org.dom4j.CharacterData
interface org.dom4j.CDATA
interface org.dom4j.Comment
interface org.dom4j.Text
interface org.dom4j.DocumentType
interface org.dom4j.Entity
interface org.dom4j.ProcessingInstruction
- 用DOM4J解析XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 解析xml之--DOM4J
- dom4j解析XML
- 使用 dom4j 解析 XML
- xml文件解析-DOM4J
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- dom4j解析xml方法
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 指向函数的指针数组
- 如何使用java synchronized进行线程同步
- 关于Sleep()函数不准确和随机数的问题
- hive文件存储格式
- Silverlight开发常见的一个小问题:2103错误
- dom4j解析XML
- python json
- Linux设备驱动程序设计(三)----Linux的特殊字符设备:混杂设备,依旧让LED闪烁起来
- PCB注意事项
- 手把手教你移植linux内核---------OK6410(一)
- 黑马程序员——内部类:类中类,方法中类
- 语法高亮编辑控件Scintilla在MFC中的简单使用
- 【数位DP】 hdu3652 B-number
- 你为什么会浮躁(摘抄)