超详细的XML介绍【附带dom4j操作XML】

server/2024/10/25 18:24:44/

XML简介

XML(EXtensible Markup Language),可扩展标记语言**

特点

  • XML与操作系统、编程语言的开发平台无关

  • 实现不同系统之间的数据交换

作用

  • 数据交互

  • 配置应用程序和网站

  • Ajax基石

XML文档结构

1.声明 一般是XML文档的第一行

2.文档描述信息

声明的组成:

  • version:文档符合xml1.0规范

  • encoding:文档字符编码,默认为UTF-8

文档结构解释:

  • 根元素:只有一个

  • 根元素的开始标签:放在最前面

  • 根元素的结束标签:放在最后面

  • 标签内容在开始标签和结束标签之间

XML标签

XML文档内容由一系列标签元素组成

 <元素名 属性名=“属性值”>元素内容</元素名>
  • 属性值用双引号包裹

  • 一个元素可以有多个属性

  • 属性值中不能直接包含<、“、&

  • 不建议使用的字符:‘、>

XML编写注意事项

  • 所有XML元素都必须有结束标签

  • XML标签对大小写敏感

  • XML必须正确的嵌套

  • 同级标签以缩进对齐

  • 元素名称可以包含字母、数字或其他的字符

  • 元素名称不能以数字或者标点符号开始

  • 元素名称中不能含空格

DOM解析XML

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()获取元素名称

DOM解析XML文件步骤

  • 创建解析器工厂对象

  • 解析器工厂对象创建解析器对象

  • 解析器对象指定XML文件创建Document对象

  • 以Document对象为起点操作DOM树

由外到内,由上到下解析

解析的操作和方法

1. 读取xml文件 SAXReader()

java"> //将xml文件加载到内存中 XML解析器SAXReader saxReader = new SAXReader();//document 加载执行xml文档获取Document对象Document document = saxReader.read(XML路径);

2.获取XML根节点getRootElement()

java"> Element rootElement = document.getRootElement();

3. 获取当前节点下所有子节点 elements()

java"> //获取根节点下所有子节点List<Element> Elist = rootElement.elements();

4. 根据指定子元素名,获取元素下所有子节点

 
java">//获取节点名称为books下所有子节点List<Element> Elist = rootElement.elements(“books”);

5. 根据指定子元素名,获取子元素对象,如果重复,则获取第一个

 
java">//获取节点名称为books下单个子节点Element element= rootElement.element(“books”);

6. 设置元素文本内容 setText()

java"> newelement.setText("内容");

7. 获取当前节点文本内容 getText()

java"> elenent.getText()

8. 根据指定子元素名,获取元素中的文本

java">e.elementText(“book”)

9. 获取当前节点属性 attributeValue(“属性名”)

java">e.attributeValue("name")

11.创建节点Element对象.addElement("节点名")

java">Element newelement = rootElement.addElement("span");

12.节点添加,修改属性Element对象.addAttribute("节点属性名",“属性值”)

java">newelement.addAttribute("type","属性值");

13.新XML添加Documen对象

java">Document read = DocumentHelper.createDocument();

14.设置XML编码

java">OutputFormat 
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");

15.写入XML文件

java">//写入XML文件的位置 以及指定的格式
XMLWriter xmlWriter=new XMLWriter(new FileWriter("cs.xml"),outputFormat);
//开始写入XML文件   写入Document对象
xmlWriter.write(document);
xmlWriter.close();

引入dom4j jar包

解析XML

java">public static void showXml(){try {SAXReader saxReader = new SAXReader();Document read = saxReader.read("index01/src/students.xml");//读取根元素Element rootElement = read.getRootElement();System.out.println("根元素名称:"+rootElement.getName());List<Element> elements = rootElement.elements();for (Element element : elements) {System.out.println( "根元素下面的元素的名称:"+element.getName()+",id属性的值为:"+element.attributeValue("id"));Element element1 = element.element("name");System.out.println("下面名为name元素的文本:"+element1.getText());Element element2 = element.element("age");System.out.println("下面名为age元素的文本:"+element2.getText());Element element3 = element.element("score");System.out.println("下面名为score元素属性为value的值:"+element3.attributeValue("value"));}} catch (Exception e) {e.printStackTrace();}}

修改Xml

java">public static void updateXml(){SAXReader saxReader = new SAXReader();try {Document read = saxReader.read("index01/src/students.xml");Element rootElement = read.getRootElement();List<Element> elements = rootElement.elements();for (Element element : elements) {if ("1002".equals(element.attributeValue("id"))){Element element1 = element.element("name");//修改第二个name元素名  李四==>王五element1.setText("王五");}}//新增元素Element element = rootElement.addElement("student");element.addAttribute("id","1003");element.addElement("name").addText("马六");element.addElement("age").addText("26");element.addElement("score").addAttribute("value","99");XMLWriter xmlWriter = new XMLWriter(new FileWriter("index01/src/students.xml"));xmlWriter.write(read);System.out.println("修改成功!!!");xmlWriter.close();} catch (Exception e) {e.printStackTrace();}}

新增XML文件

java">public static void insertXml() {//类方法,创建一个document对象Document document = DocumentHelper.createDocument();try {Element root = document.addElement("books");Element book1 = root.addElement("book").addAttribute("id", "book101");book1.addElement("author").setText("张三");book1.addElement("type").setText("文学");book1.addElement("from").setText("北京出版社");Element book2 = root.addElement("book").addAttribute("id", "book102");book2.addElement("author").setText("李四");book2.addElement("type").setText("历史");book2.addElement("from").setText("上海出版社");XMLWriter xmlWriter = new XMLWriter(new FileWriter("index01/src/books.xml"));xmlWriter.write(document);xmlWriter.close();} catch (Exception e) {e.printStackTrace();}}

删除XML元素

java">public static void deleteXml() {SAXReader saxReader = new SAXReader();try {Document read = saxReader.read("index01/src/books.xml");Element rootElement = read.getRootElement();List<Element> elements = rootElement.elements();for (Element element : elements) {if (element.attributeValue("id").equals("book101")) {Element element1 = element.element("author");element.remove(element1);System.out.println("删除成功");}}XMLWriter xmlWriter = new XMLWriter(new FileWriter("index01/src/books.xml"));xmlWriter.write(read);xmlWriter.close();} catch (Exception e) {e.printStackTrace();}}


http://www.ppmy.cn/server/122300.html

相关文章

强推!超真实的小红书AI绘图Flux大模型,一键生成超逼真的假期打卡照,AI日常照片|极致逼真模型

大家好&#xff0c;我是画画的小强 今天给大家介绍一款Flux LORA模型&#xff1a;Flux_小红书真实风格丨日常照片丨极致逼真&#xff0c;这是一款以小红书真实感风格为主题的Flux LORA模型。该模型极度真实&#xff0c;自然日常&#xff0c;直出图集猜测训练数据可能来源于真实…

Flink架构

Apache Flink — Stateful Computations over Data Streams 1 状态化流处理 第一章首先比较了传统数据处理架构的两个主要内容&#xff1a;事务型处理和分析型处理&#xff0c;其中事务型处理是说企业在日常运作过程中产生的各类应用的数据存储层。数据应用在每处理一条事件&…

AWS账单不支付账号会停用吗?

大家好&#xff0c;今天九河云来和大家聊聊一个大家都很关心的问题——如果AWS账单不支付&#xff0c;账号会停用吗&#xff1f; 首先&#xff0c;AWS&#xff08;Amazon Web Services&#xff09;是亚马逊旗下的一项云服务&#xff0c;它提供了各种各样的云计算资源&#xff…

Springboot Mybatis 动态SQL

动态SQL <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.wzb.SqlImprove2024…

Tomcat may not be running

一、问题背景 tomcat7运行在JDK1.7上&#xff0c;可启动tomcat&#xff0c;但是停止时报错误&#xff0c;如下&#xff1a; 二、适用条件 JDK1.7/JDK1.8 tomcat7 三、解决方法 1、查找java路径 which java 2、修改文件 找到/usr/lib/jvm/jdk1.7.0_80/jre/lib/security/j…

css 自定义滚动条样式

* { scrollbar-color: auto !important; scrollbar-width: auto; } //滚动条宽高 ::-webkit-scrollbar { width: 4px; height: 4px; background: transparent; } ::-webkit-scrollbar-thumb { //滑块部分 border-radius: 5px; background-color: rgba(32, 224, 254, 1); } ::-…

开源推理库介绍:ZML,Distributed Llama,EXO | LeetTalk Daily

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 开源推理库的出现为机器学习模型的部署、监控和扩展提供了强大的支持。我们介绍三个重要的开源推理库&#xff1a;ZML、Distributed Llama …

9.25作业

手动实现队列 代码如下 MyQueue.h #ifndef MYQUEUE_H #define MYQUEUE_H #include <iostream> #include <cstring> using namespace std;class Queue{ private:char* data; //字符串数据int len; //当前数量int size; //最大容量int front; //头索引int …