- 浏览: 163969 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Eywa:
方法是对的。不过此方法只能在IE浏览器下生效,其他非IE内核的 ...
使用JavaScript读取本地文本文件 -
wyfn18:
好厉害
Rational Rose 2003破解版的下载与安装 -
晓子你好:
有用,挺
exe4J的下载地址和注册码 -
this_super:
...
jxl.jar包简介/java操作excel jxl.jar下载地址 -
aocshallo:
看来我的JAVA才刚刚开始啊~
一个Java程序员应该掌握的10项技能
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;
}
发表评论
-
POI操作WORD
2012-01-01 15:04 1210通过下面的两种方法可以从文档里读取所有字符 ... -
URI、URL和URN的关系
2011-10-10 21:36 917URI、URL和URN是识别、定位和命名互联网上的资源的标准途 ... -
Gson的使用用例
2011-07-08 12:26 947User.java package com.stujs.po ... -
http1.0与http1.1的区别
2011-06-24 17:18 984在 http1.0 中,当建立一个连接之后,浏览器发送一个 ... -
Weblogic 9.2产品直接下载
2011-06-22 18:08 1095Weblogic 9.2产品直接下载,及Weblogic 9. ... -
js限制输入
2011-01-26 10:30 10401.只能输入汉字的 <input onkeyup=& ... -
如何修改JBOSS端口
2010-12-30 17:03 1397Jboss通常占用的端口是1098,1099,4444,444 ... -
如何在Spring中配置EJB
2010-12-30 10:47 2496下面我来共同学习如何在Spring中进行配置来调用远程的EJB ... -
通过Spring读取properties配置文件的信息
2010-12-30 10:30 6520现在我们一起看看如果通过Spring的配置来读取prperti ... -
EJB学习心得
2010-12-13 00:35 1067注意:在EJB中对Bean的定 ... -
ContentType 属性指定服务器响应的 HTTP 内容类型
2010-12-07 11:03 1173ContentType 属性指定服务器响应的 HTTP 内容类 ... -
如何在MyEclipse中安装JBPM
2010-02-11 12:01 62821、到官方网站下载一个压缩包jbpm-starters-kit ... -
Jbpm4.2+tomcat6+oracle9i安装过程
2009-12-06 10:44 25371.软件清单 jdk1.6 jbpm4.2 tom ... -
ibatis 之我想
2009-11-18 10:08 781ibatis的优点(与JDBC)相比1、减少了代码量2、简单3 ... -
Struts基本原理
2009-10-15 08:18 1326一、读取配置 自动启动ActionServlet ... -
dom4j的使用案例
2009-09-27 07:53 1133package org.sun.dom4j.tes ... -
Spring的自定义属性编辑器
2009-09-23 08:27 921什么是属性编辑器:自定义属性编辑器就是将Spring的字符串转 ... -
Spring IOC容器的关键点
2009-09-22 09:38 829*必须将被管理的对象定义到Spring的配置文件中 *必须定 ... -
Hibernate的查询语言HQL
2009-09-16 20:08 1218在HQL中关键字不区分大 ... -
在Hibernate中Load和Get的区别
2009-09-16 10:16 1060Load: (1)支持延迟加载即需要用到记录数据的时候在发Se ...
相关推荐
自己的XML DOM4J学习笔记 自己的XML DOM4J学习笔记
NULL 博文链接:https://hbiao68.iteye.com/blog/1520723
博文链接:https://dingjun1.iteye.com/blog/210165
dom4j是目前比较主流的对xml文件进行解析的API。
NULL 博文链接:https://hbiao68.iteye.com/blog/1485776
dom4jAPI帮助文档
DOM4J笔记.学习如何应用DOM4J开发XML
识货就下,先睹为快! 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,好像必须要设置资源分,没分的可以留言私发。