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 ...
随机推荐
- Android 某些配置记录
1, system image 大小配置: devices/intel/baytrail/ffrd8/BoardConfig.mk : BOARD_SYSTEMIMAGE_PARTITION_SIZ ...
- 小议ARM寄存器
ARM微处理器一共有37个32位寄存器,其中包括31个通用寄存器和6个状态寄存器,但是这些寄存处不能同时访问.但是通用寄存器R14 - R0 ,程序计数器PC(即R15),程序状态寄存器都是可以任何时 ...
- pypy的virtualenv安装mysql的问题解决
pypy安装mysql 构建基于pypy的virtualenv pip install virtualenv pip install pypy virtualenv --no-site-package ...
- 教你分分钟开发一个属于自己的python模块(一)——能够直接在浏览器打印的方法
曾经,用惯了python print命令的人,惊叹于python语法的精简:后来,用过了tornado.django等web开发框架,不得不佩服当初开发这些框架的人们.于是,我们开始使用它们的框架== ...
- Maven入门指南① :Maven 快速入门及简单使用
原文链接:http://www.cnblogs.com/luotaoyeah/archive/2014/06/02/3764533.html 开发环境 MyEclipse 2014 JDK 1.8 M ...
- Java基础知识点3:集合类
集合类是Java编程中经常会用到的一类常用类库,在这里将会对整个集合类进行介绍: Collection接口: Collection接口是所有集合类的根接口,代表了所有含有多个元素的集合,无论这个集合中 ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- linux 查找文件或者内容常用命令
whereis <程序名称> find [路径] <表达式> locate <文件名称> 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符 ...
- NOIP2009分数线划定【B004】
[B004]分数线划定[难度B]—————————————————————————————————————————————————————————————————————————— [题目要求] 世博 ...
- [MySQL]使用Begin...End语句的一个坑
写一个触发器,执行单条语句是OK的. 想执行多条语句,尝试在代码中加入BEGIN END.但一加BEGIN END就报错, 错误信息也很诡异,只说某一行出错了,不符合Mysql的语句规范,提示信息就个 ...