dom4j学习
在使用xml读写的过程中,用到了dom4j,也算是一个比较主流的xml包了,在使用的过程中,将学习经历记录一下,以后查阅也比较方便。
首先是在pom中添加依赖,在Maven的中心库搜索后选择了该包:
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
</dependency>
添加完这个依赖后就可以使用了dom4j了,但是在使用的过程中发现了问题,在使用selectNodes函数时产生了异常。
后来上网查询发现还缺少了一些dom4j需要的包,于是还是在中心库中搜了搜,填了一堆进去。可能有多,不过总算能正常工作了。添加的依赖如下
<dependency>
<groupId>jaxme</groupId>
<artifactId>jaxme-api</artifactId>
<version>0.3</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1-beta-4</version>
</dependency>
<dependency>
<groupId>msv</groupId>
<artifactId>xsdlib</artifactId>
<version>20030807</version>
</dependency>
<dependency>
<groupId>msv</groupId>
<artifactId>relaxngDatatype</artifactId>
<version>20030807</version>
</dependency>
<dependency>
<groupId>pull-parser</groupId>
<artifactId>pull-parser</artifactId>
<version>2</version>
</dependency>
<dependency>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>junitperf</groupId>
<artifactId>junitperf</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>stax</groupId>
<artifactId>stax-ri</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>clover</groupId>
<artifactId>clover</artifactId>
<version>1.3-rc4</version>
</dependenc
在添加完dom4j依赖之后,我们来介绍一下常用的xml功能。
1.读取,利用SAXReader进行读取,然后进行后续的解析。
File file=new File(path);
SAXReader sr=new SAXReader();
Document doc=sr.read(file);
Element root=doc.getRootElement();
2.遍历所有节点
public void showElement(Element temp){
for (Iterator it=temp.elementIterator("groupId");it.hasNext();)
{
Element result=(Element)it.next();
if (result.elements().size()>0){
System.out.println(result.getName());
showElement(result);
}
else
{
System.out.println(result.getName()+" "+result.getStringValue());
}
}
}
3.取得当前节点的指定名称的子节点
public void selectNode(String target){
SAXReader saxReader = new SAXReader();
File file = new File("H:\\m.xml");
Document document = null;
try {
document = saxReader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
Element met=root.element(target);
System.out.println(met.getText());
}
4.利用selectNode以及selectNodes函数(对于有xmlns的需要特殊处理)
public void selectNode(String target){
Map map = new HashMap();
map.put("ns","http://maven.apache.org/POM/4.0.0");
SAXReader saxReader = new SAXReader();
File file = new File("H:\\m.xml");
saxReader.getDocumentFactory().setXPathNamespaceURIs(map);
Document document = null;
try { document = saxReader.read(file); }
catch (DocumentException e) { e.printStackTrace(); }
List tmp = root.selectNodes("//ns:groupId");// 两个/指的是忽略当前节点位置在全文搜索,不加/则是当前节点的子节点中搜索,不再向深层搜索
System.out.println(tmp.size());
}
对于有命名空间的xml文件,必须采用上面的方法,使用selectNodes和selectSingleNode方法才能找到对应的Element,如果没有xmlns这种命名空间,只需要简单的直接使用即可。
5.遍历属性
public void attributeShow(Element root){
for (Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute=(Attribute)it.next(); System.out.println(attribute.getName()+":"+attribute.getText());
}
}
6.对于读取xml文件,上面介绍了几种常用方法,下面介绍一下写xml的方法。首先是修改
public void addElement(Document doc){
Element root = doc.getRootElement();
Element added=root.addElement("element1");
added.setText("added value");
added.addAttribute("type","test");
for (Iterator it=root.attributeIterator();it.hasNext();){
Attribute atr=(Attribute)it.next();
atr.setName("change");
atr.setValue("change value");
}
}
上面的例子添加了root的子节点element1 并为这个节点添加了属性和值,修改了root的属性(将所有属性改成一样的了,别在意,只是个例子)
那么接下来就是将改动保存到文件当中了
public void writeToFile(Document document){
try {
FileWriter fw=new FileWriter(path);
document.write(fw);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
运行完毕后打开文件就可以看到改动已经被写入了文件。
dom4j提供了一个非常方便的类 DocumentHelper 这个类有很多的静态方法供我们调用,很方便
public void showDocumentHelper(){
Element root=document.getRootElement();
DocumentHelper.createAttribute(root,"attr1","value1");
Document newDoc=DocumentHelper.createDocument();
Element newElement=DocumentHelper.createElement("newElement");
XPath xPath=DocumentHelper.createXPath("path");
List listEle=DocumentHelper.selectNodes("path",root);
}
还有将字符串转为xml以及xml转为字符串
Document document =DocumentHelper.parseText(str);
String docStr=document.getStringValue();
String docStr=documnet.asXML();
再来介绍一下XmlWriter,就是可以写出比较易读的xml 将filewriter包装
XMLWriter xw=new XMLWriter(new FileWriter(new File(path)));
dom4j学习的更多相关文章
- dom4j学习总结(一)
dom4j学习总结(一) (一)创建Document的基本操作 /** * xml基本操作 */ public void BaseOperation(){ //创建一个document Doc ...
- dom4j 学习总结
Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platfo ...
- dom4J 学习
Java给我们提供了标准的W3C接口实现,已完成对XML的处理.主要有两大类,分别是DOM操作,SAX解析.DOM可以将XML加载到内存中,对XML进行方便的增删查改.由于是将整个XML都加载到内存中 ...
- Dom4j 学习笔记
dom4j 是一种解析 XML 文档的开放源代码 XML 框架.dom4j下载地址 本文主要记载了一些简单的使用方法. 一.xml文件的解析 dom4j既可以解析普通的xml文件,也可以解析一个Inp ...
- Dom4j学习笔记
一.Loading XML Data 以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象.一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行 ...
- dom4j处理带命名空间的XML-使用XPath(转)
dom4j处理带命名空间的XML-使用XPath 博客分类: XML XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 使 ...
- XML学习笔记(2)--dom4j操作XML
1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...
- java学习笔记DOM4J解析(7)
DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型. DOM4J是开源组织提供的一个免费的.强大的XML解析工具,如果开发者需要在项 ...
- JavaWeb学习笔记——DOM4J
下载的地址为:http://www.dom4j.org/dom4j-1.6.1/ import java.io.File; import java.io.FileOutputStream; impor ...
随机推荐
- Loadrunner监控Linux系统资源
一.安装rsh和rpcbind 1.查看是否安装:rpm -qa |grep rsh 2.安装rsh:yum -y install rsh* 3.yum -y install nfs-utils r ...
- <select> 默认选中
不多bb,直接上代码 html代码: <li><span>所属类别</span> <select id="cate" name=" ...
- php 总结第一篇(望大家补充!谢谢)
/* 数组的常用函数 * * 数组的排序函数 * sort() * rsort() * usort() * asort() * arsort() * uasort() * ...
- tp框架之查询
//数据访问 //造模型对象 $nation = D("Nation"); //查询 //$a = $nat ...
- virtaulbox视图模式常用切换
virtaulbox发现菜单不见,如何切换视图模式呢? 很简单,通过快捷键主机(host)键 Host+F 换到全屏模 ...
- 【Java EE 学习 22 下】【单线程下载】【单线程断点下载】【多线程下载】
一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-downl ...
- 数据库事务(Database Transaction)概述
事务概念 事务可以用很多很多不同的方式去定义.事务是数据库操作执行的一个逻辑工作单元,是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.例如, 在关系数据库中, 一 ...
- 如何在IntelliJ IDEA删除Project
1.直接从菜单 File -> Close Project 关掉此项目,回到欢迎界面 2.在欢迎界面中,鼠标移到你想要删除的项目上(不要点击,一点就打开了),然后按DELETE键即可删除
- Redis学习笔记(4) Redis事务、生存时间及排序
1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...
- tomcat组成以及工作原理
1 - Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servlet Containe ...