DOM4j对XML文件的操作
来源:互联网 发布:windows ubuntu 引导 编辑:程序博客网 时间:2024/05/21 18:38
Dom4j也可以很方便完成XML文档的创建、元素的修改、文档的查询遍历等
dom4j的包以及其它依赖包下载地址
解压之后
,将里面的dom4j-1.6.1.jar这个文件直接放在项目里面,建一个lib文件夹,邮件,直接添加Add to Build Path即可构建到项目中去了.
1.xml文件
<?xml version="1.0" encoding="UTF-8"?><all><user id="10"><name> 张三 </name><age>18</age></user><user id="11"><name>Tom</name><age>10</age></user></all>
2.利用dom4j技术开始对xml文档进行增删改查
2-1 增加文档中的user对象
<span style="font-size:18px;">@Testpublic void add(){SAXReader read=new SAXReader();try {Document dom=read.read("./src/xml/1.xml");Element root=dom.getRootElement();Element userE=root.addElement("user");userE.addAttribute("id", "110");//设置属性Element nameE=userE.addElement("name");//在节点下添加一个name节点nameE.setText("jimi");//为name标签里面添加值/*Element nameE=userE.addElement("name");//添加一个name标签 nameE.setText("jimi");//为name标签里面添加值两句可以修改为 userE.addElement("name").setText("jimi");//是一样的 * */Element ageE=userE.addElement("age");//添加一个age标签ageE.setText("17");//为age添加值//以上只是添加,并没有存储到文件里面去,将dom写到文件中去XMLWriter wr=new XMLWriter(new FileOutputStream("./src/xml/1.xml"));wr.write(dom);wr.close();} catch (DocumentException e) {throw new RuntimeException("xml文件读取失败"+e.getMessage());} catch (IOException e) {throw new RuntimeException("文件存储失败"+e.getMessage());} </span>
2-2 对文件中元素进行删除
<span style="font-size:18px;">@Testpublic void Del() throws Exception{/* * 删除name=tom的user标签,我们必须找到root下面的user节点,然后根据user节点去查找name节点里面的值 *///获取文件内容SAXReader read=new SAXReader();Document dom=read.read("./src/xml/1.xml");Element root=dom.getRootElement();//获得根节点//从xml文件中,有三个user元素,需要遍历所有的,然后根据条件去删除Iterator it=root.elementIterator("user");//遍历root节点里面的所有name标签元素while(it.hasNext()){Element ele=(Element) it.next();Iterator itn=ele.elementIterator("name");while(itn.hasNext()){Element e=(Element) itn.next();if("Tom".equals(e.getText())){e.getParent().getParent().remove(e.getParent());//name的父节点为user user的父节点才能移除user节点}}}</span>
<span style="font-size:18px;">XMLWriter wr =new XMLWriter(new FileOutputStream("./src/xml/1.xml"));//文件修改好了之后存储到相应问的位置wr.write(dom);wr.close();}</span>
2-3对文件中的元素进行修改
<span style="font-size:18px;">@Test public void upadte() throws Exception{/*和删除差不多,只需要找到之后name.setText("张四");就可以了 * 之前删除采用的iterator,这里采用root.elements("user")获得list来进行遍历 * 把name=张三的修改为张四 */SAXReader read =new SAXReader();Document dom=read.read("./src/xml/1.xml");Element root=dom.getRootElement();List list=root.elements("user");int length=list.size();for(int i=0;i<length;i++){Element userE=(Element) list.get(i);List nameL=userE.elements("name");for(int j=0;j<nameL.size();j++){Element name=(Element) nameL.get(j);//System.out.println(name.getText());if("张三".equals(name.getText().trim())){name.setText("张四");System.out.println(name.getText());}}}XMLWriter wr=new XMLWriter(new FileOutputStream("./src/xml/1.xml"));wr.write(dom);wr.close();}对于采用dom4j方式来xml格式进行增删改查,必须要得到要操作的节点元素,要是很多,就采用获得list的方式<span style="white-space:pre"></span> * 如:List<Element> list2=userssE.elements("user"),然后根据需要第几个操作,比如,第一个(元素) list2.get(0)是Element<span style="white-space:pre"></span>要是下面还有很多,照样转换成list数组,一次类推,一定可以找到相应的元素节点</span>
2-4 对文件中的元素进行遍历
<span style="font-size:18px;">@Testpublic void getAll() throws Exception{SAXReader read =new SAXReader();Document dom=read.read("./src/xml/1.xml");Element root=dom.getRootElement();Iterator it=root.elementIterator();while(it.hasNext()){Element ele=(Element) it.next();System.out.println(ele.getName());System.out.println(ele.getText());//dosomething}}</span>
3.创建一个全新的XML文件
<span style="font-size:18px;">@Testpublic void createXML() throws Exception, FileNotFoundException{Document dom=DocumentHelper.createDocument();//自己创建一个document对象Element root=dom.addElement("citys");//创建的第一个节点就是root节点Element cityE=root.addElement("city");cityE.addAttribute("id", "0737");cityE.addElement("city1").setText("湖南");cityE.addElement("city2").setText("益阳");Element cityEE=root.addElement("city");cityEE.addAttribute("id", "0777");cityEE.addElement("city1").setText("广州");cityEE.addElement("city2").setText("深圳");XMLWriter wr=new XMLWriter(new FileOutputStream("./src/xml/11.xml"));wr.write(dom);wr.close();</span><span style="font-size:14px;">}</span>
创建的xml文件
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?><citys><city id="0737"><city1>湖南</city1><city2>益阳</city2></city><city id="0777"><city1>广州</city1><city2>深圳</city2></city></citys>
4.存储文件的不同方式
方式一:
<span style="font-size:18px;">//存储文件 《方式一》XMLWriter write=new XMLWriter(new FileOutputStream("./src/xml/2.xml"));write.write(dom);write.close();*/</span>
方式二:
/<span style="font-size:18px;">/存储方式二,可以指定格式,字符编码</span>
<span style="font-size:18px;"><span style="white-space:pre"></span>紧凑的格式 OutputFormat format=OutputFormat.createPrettyPrint();format.setEncoding("utf-8");//指定编码格式</span>
<span style="font-size:18px;">//XMLWriter wr=new XMLWriter(new FileOutputStream("./src/xml/2.xml"), format);//XMLWriter wr=new XMLWriter(System.out, format);//输出的方式不对,直接输出到控制台XMLWriter wr=new XMLWriter(System.out);//输出的方式不对,直接输出到控制台,但是可以就没有解释wr.write(dom);wr.close();</span>
</pre><pre name="code" class="html"><span style="font-size:18px;">/*<span style="white-space:pre"></span> * 对于两种储存方式,各有好处,但是写到文件一般有的比较多,OutputFormat format=OutputFormat.createPrettyPrint();<span style="white-space:pre"></span> * 获得格式后,可以按指定的格式设置,当然也可以改变要写到什么位置才可以。<span style="white-space:pre"></span> */</span>
5.对xml的读写,做了一个工具类
当项目中需要对xml文件操作时,可以采用这个工具。因为要实现共享,所以用到静态块。
package cn.hncu.contact.factory;import java.io.FileOutputStream;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class DomFactory { private static Document dom;//为了让document共享,必须要设置静态的,并且让其放在静态块里面 private static final String FILE_NAME = "./bin/cn/hncu/contact/xml/contact.xml"; static{ try {SAXReader reader = new SAXReader(); dom = reader.read(FILE_NAME);} catch (DocumentException e) {throw new RuntimeException(e.getMessage(), e);} } //获取的文件 public static Document getDocument(){ return dom; } //保存文件 public static void save(){ XMLWriter writer = null; try {writer = new XMLWriter( new FileOutputStream(FILE_NAME) ); writer.write( dom );} catch (IOException e) {throw new RuntimeException(e.getMessage(), e);}finally{if(writer!=null){try {writer.close();} catch (IOException e) {throw new RuntimeException("关流失败", e);}}}}}
1 0
- DOM4j对XML文件的操作
- dom4j对xml的操作
- 使用Dom4j对XML文件的各种操作
- dom4j对xml文件进行更新操作
- 【insigma】以dom4j对xml文件操作
- 利用dom4j对xml的简单操作
- dom4j对xml比较完整的操作
- dom4j 1.6.1 对xml的操作
- dom4j对xml文档的操作
- dom4j对xml字符串的操作
- dom4j对xml文档的操作
- xml-使用dom4j对xml文件进行crud操作
- 对xml文件的解析dom4j
- Dom4j操作XML文件
- xml文件操作(dom4j)
- dom4j操作XML文件
- dom4j操作xml文件
- dom4j操作XML文件
- 自动处理键盘事件的第三方库 IQKeyboardManager
- mysql->函数
- 数据存储---内存列式数据库KDB+(Q)文档
- python安装第三方包
- OVS学习总结
- DOM4j对XML文件的操作
- 使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump
- 玩家消费心理
- Xcode及模拟器SDK下载
- shell里的条件判断方式
- Activity嵌套Fragment,被系统回收,出现crash,重叠(重影)的解决方法
- 平衡检索/查找树
- 图解Android 内存分析工具之Mat使用教程
- Scrum中QA角色经验分享