- 浏览: 252224 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
a542550187:
很受用,最近正好学习软件工程方面的知识
如何建立领域模型(转) -
liiyee:
谢谢!中文版有些地方的翻译实在是挺对付的。
hibernate in action 2 英文版 -
HFLdragon:
下来学习一下
ajax upload file -
wendellup_account1:
thanks....
Spring 3 mvc Validation的错误 -
zhangjq5:
中文名乱码……
ajax upload file
Loading XML Data
以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象。一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行遍历、查询、修改等操作。
import java.io.*; import java.net.*; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; public class XMLLoader { private Document doc = null; public void parseWithSAX(File file) throws MalformedURLException, DocumentException { SAXReader xmlReader = new SAXReader(); this.doc = xmlReader.read(file); return; } public void parseWithSAX(URL url) throws MalformedURLException, DocumentException { SAXReader xmlReader = new SAXReader(); this.doc = xmlReader.read(url); return; } }
QName and Namespace
QName对象表示了一个XML元素或属性的qualified name,即一个namespace和一个local name的二元组。
Namespace对象表示了QName二元组中的namespace部分,它由prefix和URI两部分组成。
/******************** SAMPLE XML FILE ************************* <heavyz:Sample xmlns:heavyz="http://www.heavyzheng.com/schema/sample.xsd"> <heavyz:HelloWorld/> </heavyz:Sample> *************************************************************/ public void printRootQNameInfo(Document doc) { Element root = doc.getRootElement(); QName qname = root.getQName(); System.out.println("local name : " + qname.getName()); System.out.println("namespace prefix: " + qname.getNamespacePrefix()); System.out.println("namespace URI : " + qname.getNamespaceURI()); System.out.println("qualified name : " + qname.getQualifiedName()); return; } /************************* OUTPUT ***************************** localname : Sample namespace prefix: heavyz namespace URI : http://www.heavyzheng.com/schema/sample.xsd qualified name : heavyz:Sample *************************************************************/
可以调用Namespace(String prefix, String uri)构造方法构造一个新的Namespace对象;也可以调用Namespace.get(String prefix, String uri)静态方法获得一个新的Namespace对象。
可以调用QName(String name)构造方法构造一个没有namespace的qualified name;或者调用QName(String name, Namespace namespace)构造方法构造一个有namespace的qualified name。
Navigating Through an XML Tree
对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个iterator。使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。
通过递归的方法,以下代码可以根据Document对象打印出完整的XML树。
public void printXMLTree(Document doc) { Element root = doc.getRootElement(); printElement(root,0); return; } private void printElement(Element element, int level) { // print indent for (int i=0; i<level; i++) { System.out.print(" "); } System.out.println(element.getQualifiedName()); Iterator iter = element.elementIterator(); while (iter.hasNext()) { Element sub = (Element)iter.next(); printElement(sub,level+2); } return; }
Getting Information from an Element
可以通过Element类提供的方法访问一个XML元素中含有的信息:
Method | Comment |
getQName() | 元素的QName对象 |
getNamespace() | 元素所属的Namespace对象 |
getNamespacePrefix() | 元素所属的Namespace对象的prefix |
getNamespaceURI() | 元素所属的Namespace对象的URI |
getName() | 元素的local name |
getQualifiedName() | 元素的qualified name |
getText() | 元素所含有的text内容,如果内容为空则返回一个空字符串而不是null |
getTextTrim() | 元素所含有的text内容,其中连续的空格被转化为单个空格,该方法不会返回null |
attributeIterator() | 元素属性的iterator,其中每个元素都是Attribute对象 |
attributeValue() | 元素的某个指定属性所含的值 |
elementIterator() | 元素的子元素的iterator,其中每个元素都是Element对象 |
element() | 元素的某个指定(qualified name或者local name)的子元素 |
elementText() | 元素的某个指定(qualified name或者local name)的子元素中的text信息 |
getParent | 元素的父元素 |
getPath() | 元素的XPath表达式,其中父元素的qualified name和子元素的qualified name之间使用"/"分隔 |
isTextOnly() | 是否该元素只含有text或是空元素 |
isRootElement() | 是否该元素是XML树的根节点 |
要取出Element对象中某个属性的信息,可以调用attributeIterator()方法获得一个Attribute对象的iterator,然后再遍历它。也可以直接调用attributeValue()方法获得指定属性的值。该方法接受四种类型的参数:
- attributeValue(QName qname):通过指定qualified name获得属性值,如果无法找到指定的属性,则返回null。
- attributeValue(QName qname, String defaultValue):通过指定qualified name获得属性值,如果无法找到指定的属性,则返回defaultValue。
- attributeValue(String name):通过指定local name获得属性值,而忽略属性的namespace,如果无法找到指定的属性,则返回null。
- attributeValue(String name, String defaultValue):通过指定local name获得属性值,而忽略属性的namespace,如果无法找到指定的属性,则返回defaultValue。
对于一个Attribute对象,可以使用它的以下方法访问其中的信息:
Method | Comment |
getQName() | 属性的QName对象 |
getNamespace() | 属性所属的Namespace对象 |
getNamespacePrefix() | 属性所属的Namespace对象的prefix |
getNamespaceURI() | 属性所属的Namespace对象的URI |
getName() | 属性的local name |
getQualifiedName() | 属性的qualified name |
getValue() | 属性的值 |
Writing an XML Tree to OutputStream
Dom4j通过XMLWriter将由Document对象表示的XML树写入一个文件,并使用OutputFormat格式对象指定写入的风格和编码方法。调用OutputFormat.createPrettyPrint()方法可以获得一个默认的pretty print风格的格式对象。对OutputFormat对象调用setEncoding()方法可以指定XML文件的编码方法。
public void writeTo(OutputStream out, String encoding) throws UnsupportedEncodingException, IOException { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); XMLWriter writer = new XMLWriter(System.out,format); writer.write(doc); writer.flush(); return; }
Creating an XML Tree
使用DocumentFactory对象创建一个空的Document对象。DocumentFactory对象由DocumentFactory.getInstance()静态方法产生。对Document对象调用addElement()方法将创建XML根节点,并将该节点返回。也可以手工创建一个Element对象并调用Document.setRootElement()方法把它设置为根节点
import org.dom4j.DocumentFactory; import org.dom4j.Document; import org.dom4j.Element; public class XMLSaver { private DocumentFactory factory = null; private Document doc = null; private Element root = null; public XMLSaver() { factory = DocumentFactory.getInstance(); doc = factory.createDocument(); } public Element generateRoot(String name) { root = doc.addElement(name); return root; } public Element generateRoot(QName qname) { root = doc.addElement(qname); return root; } public Element generateRoot(Element element) { doc.setRootElement(element); root = element; return root; } }
Adding Information into an Element
Element通过addElement()为自己增加一个子节点到当前所有子节点的后面。该方法可以接受三种不同类型的参数:(QName qname)、(String name)或者(String qualifiedName, String namespaceURI)。该方法返回增加的子节点的Element对象。
Element通过addAttribute()为自己增加属性。该方法可以接受两种不同类型的参数:(QName qname, String value)或者(String name, String value)。该方法返回自身的Element对象。
Element通过addText()为自己增加文本内容。该方法只接受String类型参数,并返回自身的Element对象。
public void addAuthors(Element bookElement) { Element author1 = bookElement.addElement("author"); author1.addAttribute("name","Toby"); author1.addAttribute("location","Germany"); author1.addText("Tobias Rademacher"); Element author2 = bookElement.addElement("author"); author2.addAttribute("name","James"); author2.addAttribute("name","UK"); author2.addText("James Strachan"); return; }
Deleting Elements and Attributes
要删除XML树上的一棵子树,首先要找到该子树的根节点,然后对该节点调用detach()方法。注意:如果对根节点调用了detach()方法,将导致该XML树不再完整(一个XML文件需要有且仅有一个根节点)。
public void deleteSubtree(Element subtreeRoot) { subtreeRoot.detach(); return; }
要清除Element下的所有子节点(包括Element和text),可以对该Element调用clearContent()方法。该方法不会清除Element的属性。
要清除Element下的某个Attribute,首先要获得该Attribute对象,然后把它作为参数调用Element的remove()方法。
Updating an Attribute
要更新一个属性的内容,首先要获得该Attribute对象,然后可以调用setNamespace()方法更新它所属的namespace;调用setValue()方法更新它的属性值。
Updating an Element's Text
可以对一个Element对象调用isTextOnly()方法判断它是否只含有text或者是空节点。对Element对象调用addText()方法将把一个字符串附加到Element中,但不会修改它原来拥有的text或者子节点。如果Element是isTextOnly(),要修改原来含有的text,可以先调用clearContent(),再调用addText()并把新值传入。
public void updateText(Element element, String newText) { if (element.isTextOnly()) { element.clearContent(); element.addText(newText); } return; }
发表评论
-
IDEA EvalRest
2022-03-10 17:19 0Download and install plugi ... -
使用maven-jar-plugin将部分源代码打成Jar,并引入到项目使用。
2020-05-08 16:40 679需求:因为项目(单体系统)里尽可能保证项目里一部分源码,所以 ... -
CAS与spring3集成
2013-04-12 09:47 1097CAS 下载地址 https://wiki.jasig.o ... -
如何在Spring 3 MVC整合Apache CXF开发Webservice服务
2012-09-11 16:06 3531如何在Spring 3 MVC框架下结合CXF开发Webser ... -
如何在Spring 3 下结合结束大CXF开发WebService接口
2012-09-10 21:15 0如何从Spring 3 MVC架构下与Apache CXF开发 ... -
Java文件简单读写(转)
2011-10-22 15:45 847最近用Java处理文件的时候,同样遇到了中文问题,觉得还是 ... -
Java基本类型与包装类判断
2011-10-22 13:42 14432public class Test{ public sta ... -
Java深度历险合集
2011-08-26 16:43 832Java深度历险.pdf -
Apache Click 一个Java企业版的Web应用程序框架
2011-08-24 13:52 846Apache Click 是一个先进的Java企业版的Web应 ... -
Java的异常处理总结
2011-08-10 22:42 1269一、 异常的概念和Java异常体系结构 异常是程 ... -
Java反射与动态代理
2011-07-01 16:24 0在介绍Java注解的时候,多次提到了Java的反射 ... -
Red5+OpenOffice+OpenMeetings架设视频会议网络(转)
2011-05-25 14:17 1715因工作需要,这两天弄 ... -
Hibernate级联删除的问题
2011-01-25 14:50 996在one-to-many 关联时,one方一般都需要有控制级联 ... -
fmt:formatDate 的输出格式
2011-01-22 23:28 926fmt:formatDate 的输出格式 <fmt ... -
Tomcate启动内存设置
2010-10-19 16:41 706其初始空间(即-Xms)是物理内存的1/64,最大空 ... -
基于json-lib.jar包Json实例程序(转)
2010-10-18 20:22 3436基于json-lib.jar包Json实例程序 ... -
Aache下的AB性能测试工具(转)
2010-10-18 16:57 861以前安装好APACHE总是 ... -
四步将Myeclipse的web project部署到eclipse中的tomcat
2010-10-15 16:29 2065现在很多Web的项目都是在MyEclipse中开发测试完成的 ... -
实现集合中对象的排序功能
2010-09-29 18:10 686利用Set可以去掉重复的对象,利用list可以对象自然排序,如 ... -
fmt:formatDate 参数详细
2010-08-20 16:20 1366JSTL标签<fmt:formatDate>的输出 ...
相关推荐
自己的XML DOM4J学习笔记 自己的XML DOM4J学习笔记
NULL 博文链接:https://hbiao68.iteye.com/blog/1520723
博文链接:https://dingjun1.iteye.com/blog/210165
dom4j是目前比较主流的对xml文件进行解析的API。
DOM4J笔记.学习如何应用DOM4J开发XML
dom4jAPI帮助文档
NULL 博文链接:https://hbiao68.iteye.com/blog/1485776
识货就下,先睹为快! Dom4j学习教程+API htc.doc XML实用大全.doc xml学习笔记.doc xml学习笔记.doc
dom4j 被广泛的应用到xml解析上。这里给出部分网络资源
NULL 博文链接:https://even2012.iteye.com/blog/1832068
移动开发的小白树懒正在努力的学习移动开发中的web体系中的xml解析,每天提高自己...
java操作xml文件大家可以借鉴一下 利用dom4j第三方jar包 支持增加 删除 修改 查询
学习xml,使用dom4j进行操作的一些例子,其中包含一些从xml中读取数据的案例和通过java操作xml
整理了四种常用的Java操作xml的方法 学习java操作xml的好资料
自己总结的一份xml学习笔记。内容包括xml文件的书写格式,约束、jaxp及dom4j对xml解析的代码。
学习xml时候的笔记以及心得 1)DOM(JAXP Crimson解析器) 2)SAX 3)JDOM http://www.jdom.org 4)DOM4J http://dom4j.sourceforge.net
以上是XLM学习笔记,包含JAVA工程以及所需有的DOM4j需要jar包,包含学习ppt,内容涉及DTD和Schema,好像必须要设置资源分,没分的可以留言私发。