【高级编程】XML DOM4J剖析XML文件(含案例)

[复制链接]
发表于 2026-1-19 23:08:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
XML(EXtensible Markup Language),可扩展标记语言。一种用于存储和传输数据的标记语言。XML 与利用体系、编程语言的开发平台无关。实现差异体系之间的数据交换。
作用:数据交互;设置应用步伐和网站;Ajax基石
  1. <!-- 声明 -->
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <books>
  4.     <!-- 文档元素描述信息(文档结构) -->
  5.     <!-- 图书信息 -->
  6.     <book id="bk101">
  7.         <author>王珊</author>
  8.         <title>.NET高级编程</title>
  9.         <description>包含C#框架和网络编程等</description>
  10.     </book>
  11.     <book id="bk102">
  12.         <author>李明明</author>
  13.         <title>XML基础编程</title>
  14.         <description>包含XML基础概念和基本作用</description>
  15.     </book>
  16. </books>
复制代码
XML 文档内容由一系列标签元素构成
<元素名 属性名 = "属性值">元素内容</元素名>


  • 属性值用双引号包裹
  • 一个元素可以有多个属性
  • 属性值中不能直接包罗:< " &
  • 不发起使用的字符:' >
  1. <!-- 空元素 -->
  2. <name> </name>
  3. <name></name>
  4. <name/>
复制代码
XML 编写留意事项


  • 全部XML 元素都必须有竣事标签
  • XML 标签对巨细写敏感
  • XML 必须正确的嵌套
  • 同级标签以缩进对齐
  • 元素名称可以包罗字母、数字或其他的字符
  • 元素名称不能以数字大概标点符号开始
  • 元素名称中不能含空格
属性定名空间
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <batchCompany xmlns="http://www.Aptech_edu.ac"
  3.               xmlns:tea="http://www.tea.org">
  4.     <batch-list>
  5.         <batch type="thirdbatch">第三批次</batch>
  6.         <batch tea:type="thirdbatch">第三批次</batch>
  7.         <batch>午班批次</batch>
  8.     </batch-list>
  9. </batchCompany>
复制代码
  除非带有前缀,否则属性属于所属的元素的定名空间
  DOM
文档对象模子 ( Document Object Model ) 。DOM 把 XML 文档映射成一个倒挂的树。
DOM剖析包:org.w3c.dom
常用接口常用方法阐明Document:体现整个 XML 文档NodeList getElementsByTagName(String Tag)按文档序次返回文档中指定标记名称的全部元素聚集Element createElement(String tagName)创建指定标记名称的元素Node:该文档树中的单个节点NodeList getChildNodes()获取该元素的全部子节点,返回节点聚集Element:XML 文档中的一个元素String getTagName()获取元素名称DOM4J

DOM4J(Document Object Model for XML in Java)是一个简单、轻量级的Java库,用于处理惩罚XML文档。它提供了一种方式来读取、修改和写入XML文件。
在 DOM4J 中,这些类是构成XML文档的根本构成部门,它们共同构成了DOM4J的焦点模子:


  • Document 类:代表整个XML文档。每个 XML 文档的根元素就是 Document 对象的子对象
  • Element 类:代表XML文档中的元素节点。每个 Element 都著名称,可以有子元素、文本内容及属性
  • Text 类:体现XML文档中的文本节点。Text 节点可以包罗在 Element 中
  • Attribute 类:代表元素上的属性。在 <element attr="value"> 中,attr 是属性名,“value”` 是该属性的值
DOM4J 剖析 XML

方法形貌举例SAXReader()读取 xml 文件// 将 xml 文件加载到内存中 XML 剖析器
SAXReader saxReader = new SAXReader();
// document 加载实验 xml 文档获取 Document 对象
Document document = saxReader.read(XML路径);getRootElement()获取 XML 根节点Element rootElement = document.getRootElement();elements()获取当前节点下全部子节点// 获取根节点下全部子节点
List<Element> Elist = rootElement.elements();elements(“节点名”)根据指定子元素名,获取元素下全部子节点// 获取节点名称为books下全部子节点
List<Element> Elist = rootElement.elements(“books”);element(“节点名”)根据指定子元素名,获取子元素对象,如果重复,则获取第一个//获取节点名称为books下单个子节点
Element element= rootElement.element(“books”);setText()设置元素文本内容newelement.setText(“内容”);getText()获取当前节点文本内容element.getText()elementText(“节点名”)根据指定子元素名,获取元素中的文本e.elementText(“book”)attributeValue(“属性名”)获取当前节点属性e.attributeValue(“name”)addElement(“节点名”)创建节点Element对象Element newelement = rootElement.addElement(“span”);addAttribute(“节点属性名”,“属性值”)节点添加,修改属性Element对象newelement.addAttribute(“type”,“属性值”);creatDocument()新XML添加Documen对象// 创建一个Document对象
Document read = DocumentHelper.createDocument();createPrettyPrint()设置XML编码// 创建OutputFormat对象,并设置编码集
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding(“UTF-8”);write()写入XML文件//写入XML文件的位置 以及指定的格式
XMLWriter xmlWriter=new XMLWriter(new FileWriter(“cs.xml”),outputFormat);
//开始写入XML文件 写入Document对象
xmlWriter.write(document);
xmlWriter.close();我们有两个 XML 文件
  1. 【students.xml】
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <stus>
  4.     <stu id="1001">
  5.         <name>张三</name>
  6.         <age>21</age>
  7.         <score value="80"/>
  8.     </stu>
  9.     <stu id="1002">
  10.         <name>李四</name>
  11.         <age>19</age>
  12.         <score value="92"/>
  13.     </stu>
  14. </stus>
复制代码
  1. 【books.xml】
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <books>
  4.     <!--图书信息 -->
  5.     <book id="bk101">
  6.         <author>王珊</author>
  7.         <title>.NET高级编程</title>
  8.         <description>包含C#框架和网络编程等</description>
  9.     </book>
  10.     <book id="bk102">
  11.         <author>李明明</author>
  12.         <title>XML基础编程</title>
  13.         <description>包含XML基础概念和基本作用</description>
  14.     </book>
  15. </books>
复制代码
起首界说类,在 UtilsXml 类中编写公用方法
  1. public class UtilsXml {
  2.     static Document document = null;
  3.     // 读取文档(用于 读取 修改 删除方法)
  4.     public static void info(String path){
  5.         try {
  6.             //构建解析器
  7.             SAXReader saxReader = new SAXReader();
  8.             //通过read方法获得doc对象
  9.             document = saxReader.read(path);
  10.         } catch (DocumentException e) {
  11.             throw new RuntimeException(e);
  12.         }
  13.     }
  14.     // 写入文件(用于 修改 添加 删除方法)
  15.     public static void OutputXml(String path){
  16.         try {
  17.             //document 写入
  18.             XMLWriter xmlWriter = new XMLWriter(new FileWriter(path));
  19.             xmlWriter.write(document);
  20.             xmlWriter.close();
  21.         } catch (IOException e) {
  22.             throw new RuntimeException(e);
  23.         }
  24.     }
  25. }
复制代码
接下来分别界说读取、修改、添加、删除 XML 的静态方法
读取

  1. public static void showXml(){
  2.     try {
  3.         info("ch10/students.xml");
  4.         //获得根节点
  5.         Element root =  document.getRootElement();
  6.         //打印根节点名称
  7.         System.out.println("根节点:"+root.getName());
  8.         //获得所有子节点
  9.         List<Element> elements = root.elements();
  10.         for(Element element : elements){
  11.             System.out.println("---------stu--------");
  12.             //获得每个子节点上的id属性值
  13.             String id = element.attributeValue("id");
  14.             System.out.println("id:"+id);
  15.             //获得stu下name元素节点
  16.             Element name = element.element("name");
  17.             System.out.println("name:"+name.getText());
  18.             Element age = element.element("age");
  19.             System.out.println("age:"+age.getText());
  20.             Element score = element.element("score");
  21.             System.out.println("score:"+score.attributeValue("value"));
  22.         }
  23.     } catch (Exception e) {
  24.         e.printStackTrace();
  25.     }
  26. }
复制代码
修改

  1. public static void editXml(){
  2.     try {
  3.         info("ch10/students.xml");
  4.         //获得根节点
  5.         Element root =  document.getRootElement();
  6.         List<Element> elementList = root.elements();
  7.         for(Element element:elementList){
  8.             if("1002".equals(element.attributeValue("id"))){
  9.                 element.element("name").setText("王五");
  10.             }
  11.         }
  12.         //新增节点
  13.         Element stu = root.addElement("stu");
  14.         stu.addAttribute("id","1003");
  15.         stu.addElement("name").setText("马六");
  16.         stu.addElement("age").setText("20");
  17.         stu.addElement("score").addAttribute("value","77");
  18.         //document 写入students.xml
  19.         OutputXml("ch10/students.xml");
  20.     } catch (Exception e) {
  21.         e.printStackTrace();
  22.     }
  23. }
复制代码
添加

  1. public static void saveXml(){
  2.     try {
  3.         document = DocumentHelper.createDocument();
  4.         // 添加 root 节点  根节点
  5.         Element books = document.addElement("books");
  6.         Element book1 = books.addElement("book");
  7.         book1.addAttribute("id","bk101");
  8.         book1.addElement("author").setText("王珊");
  9.         book1.addElement("title").setText(".NET高级编程");
  10.         Element book2 = books.addElement("book");
  11.         book2.addAttribute("id","bk102");
  12.         book2.addElement("author").setText("王明明");
  13.         book2.addElement("title").setText("XML基础编程");
  14.         OutputXml("ch10/books.xml");
  15.     } catch (Exception e) {
  16.         e.printStackTrace();
  17.     }
  18. }
复制代码
删除

  1. public static void deleteXml(){
  2.     try {
  3.         info("ch10/books.xml");
  4.         Element root =  document.getRootElement(); // 获得根节点
  5.         List<Element> elementList = root.elements();
  6.         for(Element element:elementList){
  7.             Element  author = element.element("author");
  8.             if(author.getText().equals("王明明")){
  9.                 element.getParent().remove(element);
  10.             }
  11.         }
  12.         OutputXml("ch10/books.xml");
  13.     } catch (Exception e) {
  14.         throw new RuntimeException(e);
  15.     }
  16. }
复制代码
在 main() 方法中依次调用上述方法
  1. public class UtilsXml {
  2.     public static void main(String[] args) {
  3.         //showXml(); //读取
  4.         //editXml(); //修改
  5.         //saveXml(); //添加
  6.         deleteXml(); //删除
  7.     }
  8. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表