javaee关于dom4j对xml的基本认识

来源:互联网 发布:sql 将竖列字段拼接 编辑:程序博客网 时间:2024/05/24 22:42

昨天,我做了关于xml的一些简单操作和对dtd约束的简单了解,但是,发现使用jaxp的效果不佳,代码冗余,所以今天学习了一个新的技术去对xml进行更加简便的操作,那就是使用dom4j工具。

从学习xml的方面中:我们知道

关于xml的解析方法:
1)DOM解析:
jaxp jdomdom4j
   特点:
一次性把整个文档存在内存里面,要解析需要把整个加载构建成一个DOM树
,通过操作DOM树来操作xml,占用的内存大
2)SAX解析:
   特点:
不需要把整个文档存进内存,需要解析的时候而是读取一点,解析一点,占用的内存小

关于DOM4j的解析方法
1)首先需要的步骤一:加载dom4j.jar的jar包
2)然后需要加载xml文件:
SAXReader sr  = new SAXReader();
Document doc = sr.read(xml的文件路径);

3)读取标签,通过doc
getRootElement()  根标签
      element("name")  获取指定名称的第一个子标签
      elements("name")  获取指定名称的所有子标签,返回List集合
elements()    获取所有子标签,返回List集合
elementIterator()  获取所有子标签,返回迭代器


4)读取属性,可以通过doc,也可以通过doc得到的子标签
atttribute("name") 获取指定名称的属性对象
Attribute.getName() /getValue() 获取属性名称和属性值
attributes(): 获取所有属性,返回LIst
  attributeIterator()  获取所有属性,返回迭代器
  attributeValue("name") 获取指定名称的属性值


5)读取文本的值,可以通过doc,也可以通过doc得到的子标签
getText()  获取当前标签的文本内容
elementText("name") 获取指定名称的子标签文本内容(只能获取第一个)




6)通过dom4j修改文本,需要在内存的读取的同时,还需要把修改的结果保存在硬盘上,
//读取xml文件
SAXReader sr  = new SAXReader();
Document doc = sr.read(xml的文件路径);


//写出xml文件
XMLWriter writer = new XMLWriter(
new FileOutputStream(写出的xml文件路径),
//OutputFormat.createCompactFormat()  :此默认值,输出的格式是紧凑的
  | OutputFormat.createPrettyPrint()  :输出的格式是漂亮的
);
writer.write(doc);
writer.close();

增加:
标签: addElement("name")
属性:  addAttribute("name","value");
修改:
属性值: addAttribute("name","vaue") / Attribute.setValue("value")
文本:   setText("value")
删除:
标签:   detach()  / getParent().remove(xxx);
    属性:   detach()  / getParent().remove(xxx);


下面是关于dom4j的一些基础的联系:

一、首先是需要操作的xml文件

<?xml version="1.0" encoding="GBK"?><exam><student idcard="111" examid="222"><name>张三</name><location>沈阳</location><grade>89</grade></student><student idcard="333" examid="444"><name>李四</name><location>大连</location><grade>97</grade></student></exam>

二、创建一个类并导入dom4j的包

package xml.example.reader;import java.io.FileOutputStream;import java.io.IOException;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class demo2_writer {//1.添加属性、标签@Testpublic void test01() throws Exception{Document doc = read();Element root = doc.getRootElement();Element addElement1 = root.addElement("employer");//已过时 addElement1.setAttributeValue("id", "04");addElement1.addAttribute("id", "04");addElement1.addElement("id").addText("4");addElement1.addElement("name").addAttribute("name", "zl").addText("赵六");addElement1.addElement("age").addText("15");addElement1.addElement("departement").addText("服务部");addElement1.addElement("money").addText("9k");write(doc);}@Testpublic void test02() throws Exception{//修改属性和文本Document doc = read();Element root = doc.getRootElement();//方式一、直接从标签中得到元素的属性然后在覆盖它//Element element = (Element) root.elements().get(1);//element.addAttribute("id", "04");//方式二、从元素中得到了属性之后,再重新设值/*Element element = (Element) root.elements().get(1);Attribute attribute = element.attribute("id");attribute.setValue("05");*///修改文本Element element = (Element) root.elements().get(1);element.element("name").addAttribute("name", "zl").setText("赵六");write(doc);}@Testpublic void test03() throws Exception{//删除标签或者属性Document doc = read();Element root = doc.getRootElement();//方式一:从标签中得到属性之后,直接detach删除Element element = (Element) root.elements().get(2);element.detach();//方式二:得到标签之后再从标签得到他的父标签,再删除//Element element = (Element) root.elements().get(2);//element.getParent().remove(element);write(doc);}//读取xml文件public Document read() throws Exception{SAXReader sr  = new SAXReader();Document doc = sr.read("src/example02.xml");return doc;}//修改到xml文件中public void write(Document doc) throws Exception{XMLWriter writer = new XMLWriter(new FileOutputStream("src/example02.xml")//,OutputFormat.createCompactFormat());writer.write(doc);writer.close();}}

通过今天的学习,基本了解了dom4j的工作原理与基本操作,明天将学习有关SAX解析和XPath的基本操作,因为如果使用dom4j的操作,当xml的量比较多的话,使用dom4j就比较麻烦了,这个时候就需要XPath了

0 0
原创粉丝点击