在使用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学习的更多相关文章

  1. dom4j学习总结(一)

    dom4j学习总结(一) (一)创建Document的基本操作 /**  * xml基本操作  */ public void BaseOperation(){  //创建一个document  Doc ...

  2. dom4j 学习总结

    Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platfo ...

  3. dom4J 学习

    Java给我们提供了标准的W3C接口实现,已完成对XML的处理.主要有两大类,分别是DOM操作,SAX解析.DOM可以将XML加载到内存中,对XML进行方便的增删查改.由于是将整个XML都加载到内存中 ...

  4. Dom4j 学习笔记

    dom4j 是一种解析 XML 文档的开放源代码 XML 框架.dom4j下载地址 本文主要记载了一些简单的使用方法. 一.xml文件的解析 dom4j既可以解析普通的xml文件,也可以解析一个Inp ...

  5. Dom4j学习笔记

    一.Loading XML Data 以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象.一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行 ...

  6. dom4j处理带命名空间的XML-使用XPath(转)

    dom4j处理带命名空间的XML-使用XPath 博客分类: XML   XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 使 ...

  7. XML学习笔记(2)--dom4j操作XML

    1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...

  8. java学习笔记DOM4J解析(7)

    DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型. DOM4J是开源组织提供的一个免费的.强大的XML解析工具,如果开发者需要在项 ...

  9. JavaWeb学习笔记——DOM4J

    下载的地址为:http://www.dom4j.org/dom4j-1.6.1/ import java.io.File; import java.io.FileOutputStream; impor ...

随机推荐

  1. 站点SEO优化日记之设置目标关键词

    一.怎样确定关键词? 根据百度指数,选择搜索指数较高的作为候选关键词.一个关键词的搜索结果中,若大部分都为非首页链接,则该关键词可在短时间内通过优化获得好的排名,可选择此类关键词作为目标关键词. 二. ...

  2. 一张图说明CDN网络的原理

    原文: http://blog.csdn.net/coolmeme/article/details/9468743 1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓 ...

  3. 在hive中遇到的错误

    1:如果在将文件导入到hive表时,查询结果为null(下图) 这个是因为在创建表的时候没有指定列分隔符,hive的默认分隔符是ctrl+a(/u0001)   2.当我复制好几行sql到hive命令 ...

  4. 【Java EE 学习 49 下】【Spring学习第一天】【MVC】【注解回顾】

    一.MVC 1.使用Spring有一个非常大的好处,那就是能够实现完全面向接口编程,传统的使用Dao.Service并不能实现完全的面向接口编程. 2.示例:https://github.com/kd ...

  5. 使用脚本自动配置matlab安装libsvm和随机森林工具箱

    前言 支持向量机(SVM)和随机森林 都是用于分类的机器学习算法. 这里我需要对网上的工具箱在matlab中进行配置. 效果演示: 1.双击运行“自动配置.bat” 2.matlab会自动启动,手动配 ...

  6. xamarin.Android 标记1

    群里一个朋友的博客 推荐一下 自己也做个书签记录. http://sunyt.me/2015/04/15/Xamarin-FAQ/

  7. Hadoop 大数据第一天

    大数据第一天 1.Hadoop生态系统 1.1 Hadoop v1.0 架构 MapReduce(用于数据计算) HDFS(用于存储数据) 1.2 Hadoop v2.0 架构 MapReduce(用 ...

  8. a pity

    机会只眷顾有准备且自信的人,此生谨记. ——Charles Hsu 2014-09-04

  9. 作弊Q-百威

    ===_=374793763===_= 2652880032 865580818 大康 2652880032 春牛 3479301404  皮卡丘 3242026908  舍得放手

  10. TGridPanel做一个自动按比例缩放的窗体

    object grdpnlAdd: TGridPanel Left = Top = Width = Height = Align = alClient //重要 BevelOuter = bvNone ...