最新消息:文章中包含代码时,请遵守代码高亮规范!

[原创]XML解析—-Dom4j

Java Alex 291浏览 0评论
在java中将XML文件封装成一个完整的文档树对象,我们可以使用Dom4j来进行解析。
Document————-文档树对象
Element————–标签节点对象
Attribute————属性节点对象
Text—————文本节点对象
获取节点对象
     document.nodeIterator()//返回Iterator,用户获取根节点对象(包含文本对象)
     element.nodeIterator()//返回Iterator,用户获取根节点对象(包含文本对象)
Document
     getRootElement//获取跟标签
     addElement(String name)给文档树创建一个跟标签;
Element
     element(String eleName)//根据名称获取子标签
     elements()//获取当前标签所有子标签
     elementIterator(String eleName);//返回Iterator,用于遍历获取当前标签所有子标签
     ele.attributeValue(String attName);//获取当前标签下指定名称的属性值
     ele .attribute(String attName);//获取当前标签下指定名称的属性对象
     ele .attributes();//获取当前标签下所有属性对象
     ele.getText(String value );获取文本对象
     ele.addElement(String eleName);//给当前标签添加一个子标签
     ele .addAttribute(String attName,String value);//给当前标签下添加(或更改)属性对象并且赋值
     ele.setText(String value );//设置文本
     ele.detach();//删除当前标签
Attribute
     attribute.setValue(String value);//设置属性值
     attribute.detach();删除当前属性
注意:只有标签对象和文档数对象才会有子标签。
       文本对象和标签对象一样都是节点对象的子级。
文本对象和标签对象一样都是节点对象的子级。
写入:XMLWriter
      XMLWriter writer=new XMLWriter(OutputStream out,OutputFormat format)
      writer.writer(Docoment document)
解析:SAXReader
     SAXReader reader=new SAXReader();
     reader.read(InputStream in);
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
/*
 1.使用dom4j的api来生成以下的xml文件

<Students>
<Student id="1">
 <name>张三</name>
 <gender>男</gender>
 <grade>计算机1班</grade>
 <address>广州天河</address>
</Student>
<Student id="2">
 <name>李四</name>
 <gender>女</gender>
 <grade>计算机2班</grade>
 <address>广州越秀</address>
</Student>
</Students>

2.修改id为2的学生的姓名,改为“王丽”

3.删除id为2的学生
 */
public class Test1 {
 @Test
 //生成
 public void store() throws Exception{
 int count=2;
 Document doc=DocumentHelper.createDocument();
 //添加根标签
 Element rootElem=doc.addElement("students");
 //根标签添加两个子标签并且赋予id属性
 for(int i=0;i<count;i++){
 Element studentElem=rootElem.addElement("student");
 studentElem.addAttribute("id",Integer.toString(i+1));
 }
 //再获取跟标签的两个子标签给他们添加子标签
 Iterator<Element> it=rootElem.elementIterator("student");
 while(it.hasNext()){
 //获取跟标签的子标签
 Element elem=it.next();
 Element nameElem=elem.addElement("name");
 Element sexElem=elem.addElement("sex");
 Element gardeElem=elem.addElement("garde");
 Element addressElem=elem.addElement("address");
 }

 //具体给标签添加属性
 List<Element> list=rootElem.elements("student");
 list.get(0).element("name").setText("张三");
 list.get(0).element("sex").setText("男");
 list.get(0).element("garde").setText("计算机一班");
 list.get(0).element("address").setText("芜湖");


 list.get(1).element("name").setText("李四");
 list.get(1).element("sex").setText("女");
 list.get(1).element("garde").setText("计算机二班");
 list.get(1).element("address").setText("芜湖");
 //生成文档
 OutputFormat format=OutputFormat.createPrettyPrint();
 format.setEncoding("utf-8");
 new XMLWriter(new FileOutputStream(new File(".\\src\\write\\Text1.xml")),format).write(doc);
 }


 //修改
 @Test
 public void amand() throws Exception{
 //读取文件
 Document doc=new SAXReader().read(new File(".\\src\\write\\Text1.xml"));

 //修改
 Element rootElem=doc.getRootElement();
 List<Element> list=rootElem.elements();
 list.get(1).element("name").setText("王丽");

 //生成
 OutputFormat format=OutputFormat.createPrettyPrint();
 format.setEncoding("utf-8");
 new XMLWriter(new FileOutputStream(new File(".\\src\\write\\Text1.xml")), format).write(doc);
 }
 //删除
 @Test
 public void myDetach() throws Exception{
 Document doc=new SAXReader().read(new File(".\\src\\write\\Text1.xml"));
 Element rootElement=doc.getRootElement();
 //删除操作
 List<Element> list= rootElement.elements("student");
 Element studentElem=list.get(1);
 studentElem.detach();

 OutputFormat format=OutputFormat.createPrettyPrint();
 format.setEncoding("utf-8");
 new XMLWriter(new FileOutputStream(new File(".\\src\\write\\Text1.xml")), format).write(doc);
 }
}

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/24075.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Alex的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!