ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:22.66KB ,
资源ID:4673714      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4673714.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(dom4j从基础到精通.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

dom4j从基础到精通.docx

1、dom4j从基础到精通dom4j 雪飘寒2010-10-18目录dom4j实例详解 1目录 1一、dom4j介绍 2二、使用dom4j创建xml文档 3三、使用dom4j解析xml文件 51. 构建dom4j树 52. 获取节点 53. 获取属性 64. 使用XPath获取节点和属性 6四、使用dom4j修改xml文件 7五、常用方法 81Element元素API 82. Attribute属性API 82. 字符串转化 83. 命名空间(Namespace)操作 8六、Qname介绍 10七、Visitor模式 11一、dom4j介绍dom4j是一个Java的XML API,类似于jdom,

2、用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包, Hibernate用它来读写配置文件。 dom4j主要接口都在org.dom4j这个包里定义: A

3、ttributeAttribute定义了XML的属性BranchBranch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,CDATACDATA 定义了XML CDATA 区域CharacterDataCharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.CommentComment 定义了XML注释的行为Document定义了XML文档DocumentTypeDocumentType 定义XML DOCTYPE声明ElementElement定义XML 元素ElementHandlerEl

4、ementHandler定义了 Element 对象的处理器ElementPath被 ElementHandler 使用,用于取得当前正在处理的路径层次信息EntityEntity定义 XML entityNodeNode为所有的dom4j中XML节点定义了多态行为NodeFilterNodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)ProcessingInstructionProcessingInstruction 定义 XML 处理指令.TextText 定义XML 文本节点.VisitorVisitor 用于实现Visitor模式.XPathX

5、Path 在分析一个字符串后会提供一个XPath 表达式看名字大致就知道它们的涵义如何了。要想弄懂这套接口,关键的是要明白接口的继承关系:o interface java.lang.Cloneable o 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.CDAT

6、A interface org.dom4j.Comment interface org.dom4j.Text interface org.dom4j.DocumentType interface org.dom4j.Entity interface org.dom4j.ProcessingInstruction 一目了然,很多事情都清楚了。大部分都是由Node继承来的。知道这些关系,将来写程序就不会出现ClassCastException了。二、使用dom4j创建xml文档Document document = DocumentHelper.createDocument();通过这句定义一个X

7、ML文档对象。Element root = document.addElement(根节点名称); 通过这句定义一个XML元素,这里添加的是根节点。Element有几个重要的方法: addComment : 添加注释 addAttribute : 添加属性 addElement : 添加子元素最后通过XMLWriter生成物理文件,默认生成的XML文件排版格式比较乱,可以通过OutputFormat类格式化输出,默认采用createCompactFormat()显示比较紧凑,最好使用createPrettyPrint()。 实例代码public static void main(String

8、args) / 创建文档。 Document document = DocumentHelper.createDocument(); / 设置文档DocType,这里为了举例,添加hibernate的DocType document.addDocType(hibernate-configuration, -/Hibernate/Hibernate Configuration DTD 3.0/EN, / 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错 Element root = document.addElement(skills); / 添加注释 root.addComment(

9、第一个技能); / 根节点下添加节点 Element first = root.addElement(skill); / 节点添加属性 first.addAttribute(name, 独孤九剑); / 节点下添加节点 Element info = first.addElement(info); / 节点设置内容数据 info.setText(为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。); / 同理增加其他节点,内容,属性等 Element second = root.addElement(skill); second.addAttribute(name, 葵花宝典);

10、Element info2 = second.addElement(info); info2.setText(宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。); /* * 第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add加入。 */ / 创建节点 Element third = DocumentHelper.createElement(skill); / 将节点加入到根节点中 root.add(third); / 创建属性,第一个参数指定了拥有者,也可以为null,指定拥有者 Attribute name = DocumentHelper.createAtt

11、ribute(third, name, 北冥神功); / 将属性加入到节点上 third.add(name); / 创建子节点并加入到节点中 Element info3 = DocumentHelper.createElement(info); info3.setText(逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。); third.add(info3); try / 创建格式化类 OutputFormat format = OutputFormat.createPrettyPrint(); / 设置编码格式,默认UTF-8 format.setEncoding(UTF-8);

12、/ 创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用 FileOutputStream fos = new FileOutputStream(d:/skills.xml); / 创建xml输出流 XMLWriter writer = new XMLWriter(fos, format); / 生成xml文件 writer.write(document); writer.close(); catch (Exception e) e.printStackTrace(); 生成XML文件内容!DOCTYPE hibernate-configuration

13、PUBLIC -/Hibernate/Hibernate Configuration DTD 3.0/EN 为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。 宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。 逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。 三、使用dom4j解析xml文件1. 构建dom4j树 org.dom4j.io提供了两个类:SAXReader和DOMReader,DOMReader只能一个现有的w3c DOM树构建dom4j树,即只能从一个org.w3c.dom.Document中构建org.dom4j.Document树,而

14、SAXReader则使用SAX解析器,从不同的输入源构建dom4j树,如可以从xml文件中读取并构建dom4j树。实例代码:使用SAXReader解析 SAXReader reader = new SAXReader(); Document document = reader.read(new File(d:/skills.xml);实例代码:使用DOMReader解析 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder();

15、 File file = new File(d:/skills.xml); org.w3c.dom.Document domDocument = db.parse(file); DOMReader reader = new DOMReader(); org.dom4j.Document document = reader.read(domDocument);2. 获取节点 获得dom4j树之后,可以根据dom4j树获取节点。首先获取根节点,然后根据根节点获取其子节点。实例代码:访问根节点 Element root = document.getRootElement();实例代码:访问所有子节点

16、 List skills = root.elements(); for (Iterator it = skills.iterator(); it.hasNext();) Element e = (Element) it.next(); /TODO 实例代码:访问指定名称的节点,如访问名称为“skill”的全部节点 List skills = root.elements(skill); for (Iterator it = skills.iterator(); it.hasNext();) Element e = (Element) it.next(); /TODO 实例代码:访问指定名称的第一

17、个节点 Element skill = root.element(skill);实例代码:迭代某个元素的所有子元素,如迭代root for(Iterator it = root.elementIterator();it.hasNext();) Element e = it.next(); /TODO 3. 获取属性 获取节点后,可以根据节点获取属性,获得方式与获取节点类似。实例代码:获取指定名称的元素 Element skill = root.element(skill); Attribute attr1 = skill.attribute(name);实例代码:按照属性顺序获取属性, Ele

18、ment skill = root.element(skill); Attribute attr2 = skill.attribute(0);实例代码:获取某节点下全部属性1 Element skill = root.element(skill); List list = skill.attributes(); for (Iterator it = list.iterator(); it.hasNext();) Attribute attr = it.next(); / TODO 实例代码:获取某节点下全部属性2 Element skill = root.element(skill); for

19、 (Iterator it = skill.attributeIterator(); it.hasNext();) Attribute attr = it.next(); / TODO 4. 使用XPath获取节点和属性 Dom4j 中集成了对XPath的支持。在选择节点时,可以直接使用XPath 表达式。这种方式更加方便,简洁,官方文档中推荐使用该种方式。实例代码:要选择所有的元素的name属性 List list = document.selectNodes(/skills/skill/name); for (Iterator it = list.iterator(); it.hasNex

20、t();) Attribute attr = (Attribute) it.next(); /TODO 注意:为了能够编译执行上述使用XPath表达式的代码,需要配置dom4j 安装包中自带的jaxen包,你也可以从 目录下,有一个lib 子目录,其中有个jaxen-1.1-beta-6.jar文件,需要在classpath环境变量中配置该文件的全路径名。四、使用dom4j修改xml文件 修改xml文件,需要先获取dom4j树(即Document),通常欲修改节点需要先获得该节点或其父节点,欲修改属性,需要先获得该属性所在的节点和该属性。 增加操作:参照前文。删除操作:实例代码:删除某节点 E

21、lement root = document.getRootElement(); Element skill = root.element(skill); root.remove(skill);实例代码:删除指定名称的属性 Element skill = root.element(skill); skill.remove(skill.attribute(name); 修改操作:实例代码:修改节点名称和节点值 Element skill = root.element(skill); skill.setName(new_skill); skill.setText(你好);实例代码:修改属性值 At

22、tribute attr = skill.attribute(name); attr.setText(newName);属性名称无法修改,欲修改属性名称,可以先删除旧属性,再增加新属性五、常用方法1Element元素APIMethodCommentgetQName()元素的QName对象getNamespace()元素所属的Namespace对象getNamespacePrefix()元素所属的Namespace对象的prefixgetNamespaceURI()元素所属的Namespace对象的URIgetName()元素的local namegetQualifiedName()元素的qua

23、lified namegetText()元素所含有的text内容,如果内容为空则返回一个空字符串而不是nullgetTextTrim()元素所含有的text内容,其中连续的空格被转化为单个空格,该方法不会返回nullattributeIterator()元素属性的iterator,其中每个元素都是Attribute对象attributeValue()元素的某个指定属性所含的值elementIterator()元素的子元素的iterator,其中每个元素都是Element对象element()元素的某个指定(qualified name或者local name)的子元素elementText()

24、元素的某个指定(qualified name或者local name)的子元素中的text信息getParent元素的父元素getPath()元素的XPath表达式,其中父元素的qualified name和子元素的qualified name之间使用/分隔isTextOnly()是否该元素只含有text或是空元素isRootElement()是否该元素是XML树的根节点2. Attribute属性APIMethodCommentgetQName()属性的QName对象getNamespace()属性所属的Namespace对象getNamespacePrefix()属性所属的Namespac

25、e对象的prefixgetNamespaceURI()属性所属的Namespace对象的URIgetName()属性的local namegetQualifiedName()属性的qualified namegetValue()属性的值2. 字符串转化实例代码:把节点,属性,文档等转化成字符串,使用asXML()方法。 String docXmlText = document.asXML(); String rootXmlText = root.asXML();实例代码:把字符串转换为文档,注意引号需要转义 String skillString = 神龙摆尾; Document d = Doc

26、umentHelper.parseText(skillString);3. 命名空间(Namespace)操作dom4j的名称空间信息api常用的方法有8个。 dom4j在Element和Attribute 接口中定义了获取名称空间信息的方法,这些方法和JDOM中的方法相同。如下所示:public java.lang.String getNamespacePrefix()该方法返回元素(属性)的名称空间前缀public java.lang.String getNamespaceURI()该方法返回元素(属性)的名称空间URIpublic java.lang.String getName()该方

27、法返回元素(属性)的本地名public java.lang.String getQualifiedName()该方法返回元素(属性)的限定名public Namespace getNamespace()该方法返回元素本身的名称空间public java.util.List additionalNamespaces()返回某元素上附加的名称空间声明列表,列表中的每一个对象都是Namespace类型。这个类的方法提供了两个方法分别获得名称空间前缀和本地名。如下: public java.lang.String getPrefix()该方法返回名称空间前缀。public java.lang.String getURI()该方法返回名称空间的URI。六、Qname介绍Qname在使用dom4j的时候,经常见到,一般自己解析的xml很少使用这种复杂格式。1. 来历:qname是qualified name的简写2. 构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成3. 举例: xsl是名字空间前缀,template

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1