DOM4J核心类和关系图

这篇博客介绍了DOM4J作为XML解析工具的优势,它比DOM、SAX和JDOM更加强大。DOM4J简化了XML的读写操作,提供了DocumentHelper、Node、Branch、Document、Element等核心类,便于开发人员使用。并提到了DOM4J的核心类关系图,帮助理解其内部结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • java本身提供的XML解析工具
    • DOM解析(w3c规范):将整个xml文件加载到内存中,支持对xml文件的读取和增删改查,但是缺点就是读取操作太过繁琐,如果xml文件过大速度会大大降低.
    • SAX解析(非w3c规范):按照文件顺序,逐行读取xml文件,所占内存小,适合读取大型xml文件,支持事件处理,但是缺点是无法进行xml数据输出,而却解析器实现难度较大,不能够回读.
  • 于是后来出现了另一个JDOM解析,JDOM解析和DOM解析采用都是同一个解析器,JDOM将DOM和SAX的优点结合起来,简化了DOM读取操作的过程,简化了输出DOM树的操作.但是本质上没有什么区别.

DOM4J–更强大的解析工具

  • DOM4J解析xml文件比DOM和SAX还有JDOM都要更强大.但是DOM4J并不是Java官方提供的操作接口,要使用DOM4J可以到官网中下载DOM4J.jar包,将jar包导入到项目中即可使用.

  • DOM4j解析的好处在与简化了,xml文档数据的增删改查和xml文档的输出操作,方便了开发人员的操作,便于理解.

  • DOM4J的核心类关系图

在这里插入图片描述

认识DOM4j核心类

  • org.dom4j.DocumentHelper工具类
    • 主要作用于创建xml文档
创建文档方法public static Document createDocument()
创建元素方法public static Element createElement(QName qname)
创建指定元素的属性不推荐使用public static Attribute createAttribute(Element owner,QName qname, String value)
  • 节点描述接口:org.dom4j. Node
取得节点名称public String getName()
设置节点名称public void setName(String name)
取得父元素public Element getParent()如果该节点是根节点,则返回null
取得元素文本public String getText()
设置元素内容public void setText(String text)
设置父元素public void setParent(Element parent)
输出public void write(Writer writer) throws IOException
  • org.dom4j. Branch接口,描述节点的公共行为
追加子元素public void add(Element element)
创建并追加新的子元素public Element addElement(String name)
取得指定索引的node元素public Node node(int index) throws IndexOutOfBoundsException
取得节点个数public int nodeCount()
返回包含这个分支下的所有子节点的Iterator集合,便于输出使用public Iterator nodeIterator()
删除指定元素public boolean remove(Element element)
  • 文档接口:org.dom4j. Document
设置XML文件编码public void setXMLEncoding(String encoding)
  • 元素接口:org.dom4j. Element
取得指定属性的内容public String attributeValue(QName qName)
取得所有属性个数public int attributeCount()
返回指定名称元素以Iterator方式返回元素public Iterator elementIterator(String name)
返回指定名称的所有元素public List elements(String name)
返回并删除空格信息public String elementTextTrim(String name)
  • org.dom4j.io.OutputFormat:输出格式化类
创建压缩输出(输出的数据不含有缩进空格)public static OutputFormat createCompactFormat()
美化输出(数据间含有缩进空格)public static OutputFormat createPrettyPrint()
  • 输出类:org.dom4j.io. XMLWriter
构造方法,指定输出来源,和指定输出格式public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException
输出整个xml文件public void write(Document doc) throws IOException
01-04
package xmllab;import java.io.File;import java.io.FileWriter;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/*** @author Holen Chen*/public class Dom4jDemo { public Dom4jDemo() { } /** * 建立一个XML文档,文档名由输入属性决定 * @param filename 需建立的文件名 * @return 返回操作结果, 0表失败, 1表成功 */ public int createXMLFile(String filename){ /** 返回操作结果, 0表失败, 1表成功 */ int returnValue = 0; /** 建立document对象 */ Document document = DocumentHelper.createDocument();// /** 建立XML文档的根books */ Element booksElement = document.addElement("books");// /** 加入一行注释 */ booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");// /** 加入第一个book节点 */ Element bookElement = booksElement.addElement("book");// /** 加入show属性内容 */ bookElement.addAttribute("show","yes");// /** 加入title节点 */ Element titleElement = bookElement.addElement("title");// /** 为title设置内容 */ titleElement.setText("Dom4j Tutorials");//Dom4j Tutorials /** 类似的完成后两个book */ bookElement = booksElement.addElement("book"); bookElement.addAttribute("show","yes"); titleElement = bookElement.addElement("title"); titleElement.setText("Lucene Studing"); bookElement = booksElement.addElement("book"); bookElement.addAttribute("show","no"); titleElement = bookElement.addElement("title"); titleElement.setText("测试"); /** 加入owner节点 */ Element ownerElement = booksElement.addElement("owner"); ownerElement.setText("O'Reilly"); try{ /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(filename))); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } /** * 修改XML文件中内容,并另存为一个新文件 * 重点掌握dom4j中如何添加节点,修改节点,删除节点 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件 * @return 返回操作结果, 0表失败, 1表成功 */ public int ModiXMLFile(String filename,String newfilename){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */ /** 先用xpath查找对象 */ List list = document.selectNodes("/books/book/@show" ); Iterator iter = list.iterator(); while(iter.hasNext()){ Attribute attribute = (Attribute)iter.next(); if(attribute.getValue().equals("yes")){ attribute.setValue("no"); } } /** * 修改内容之二: 把owner项内容改为Tshinghua * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type */ list = document.selectNodes("/books/owner" ); iter = list.iterator(); if(iter.hasNext()){ Element ownerElement = (Element)iter.next(); ownerElement.setText("Tshinghua"); Element dateElement = ownerElement.addElement("date"); dateElement.setText("2007-09-06"); dateElement.addAttribute("type","Gregorian calendar"); } /** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */ list = document.selectNodes("/books/book"); iter = list.iterator(); while(iter.hasNext()){ Element bookElement = (Element)iter.next(); Iterator iterator = bookElement.elementIterator("title"); while(iterator.hasNext()){ Element titleElement=(Element)iterator.next(); if(titleElement.getText().equals("Dom4j Tutorials")){ bookElement.remove(titleElement); } } } try{ /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename))); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } /** * 格式化XML文档,并解决中文问题 * @param filename * @return */ public int formatXMLFile(String filename){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); XMLWriter writer = null; /** 格式化输出 */ OutputFormat format = OutputFormat.createPrettyPrint(); /** 指定XML编码 */ format.setEncoding("GBK"); writer= new XMLWriter(new FileWriter(new File(filename)),format); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } public static void main(String[] args) { Dom4jDemo temp = new Dom4jDemo(); //System.out.println(temp.createXMLFile("d://testxml.xml")); //System.out.println(temp.ModiXMLFile("d://testxml.xml","d://testxml2.xml"));// try{ System.out.println(temp.formatXMLFile("d://testxml2.xml"));// // System.out.println(temp.formatXMLFile("E:\\test.xml"));// }// catch(Exception e)// {// // e.printStackTrace();// System.out.print("error!");//// } }}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值