XML:DOM4j解析XML

XML简介:

什么是XML:XML 是独立于软件和硬件的信息传输工具。

  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML不会做任何事情,XML被设计用来结构化、存储以及传输信息。

XML可以发明自己的标签:

HTML仅仅可以用在 标准中定义过的标签

而XML没有预定义的标签,XML允许创作者定义自己的标签和自己的文档结构

特点:

XML与操作系统、编程语言的开发平台无关实现不同系统之间的数据交换

作用:

数据交互配置应用程序和网站Ajax基石

文档声明:

<?xml version="1.0" encoding="UTF-8"?>

属性值用双引号包裹

一个元素可以有多个属性

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

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

XML编写注意事项:
  • 所有XML元素都必须有结束标签
  • XML标签对大小写敏感XML必须正确的嵌套
  • 同级标签以缩进对齐
  • 元素名称可以包含字母、数字或其他的字符
  • 元素名称不能以数字或者标点符号开始
  • 元素名称中不能含空格
  • 属性必须加”“

XML 文档:

  • XML文件必须要有根元素,这里的class就是根元素,
  • 元素可以包含属性,属性提供有关元素的附加信息,属性位于开始标签中。
<?xml version="1.0" encoding="UTF-8"?>
<class><student name="王显明"><score predicted="75" actualScore="80" /></student><student name="宋佳"><score predicted="75" actualScore="88" /></student>
</class>

XML实体引用:

在xml这样是错误的,因为xml会把<当作一个新的开始标签

<message>if salary < 1000 then</message>

为了为避免我们就可以用实体标签:

<

&it;

>

&gt

&

&amp;

'

&apos;

"

&quot

CDATA区:

CDATA 区段中的内容不会被 XML 解析器处理为 XML 标签或特殊字符,而是作为纯文本来处理。

  <content><![CDATA[aaaa<<<>>>]]></content>

XML注释:

和html的注释一样

<!-- This is a comment -->
xml的空格:

在html中空格会被合并为1个,但是XML中空格不会被删减

XML元素:

元素命名规则:
  • 名称可以包含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字母 xml(或者 XML、Xml 等等)开始
  • 名称不能包含空格

XML属性:

  • 属性值必须被引号包围,不过单引号和双引号均可使用。
<person sex="female">

也可以

<person sex='female'>

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。

XML命名空间:

xmlns:[前缀属性] ="[命名空间的URL]"

解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素

这样可以在同一个文档中使用 bookauthor 命名空间下的元素,避免名称冲突并保持数据结构的清晰性。

  • xmlns:book="http://www.example.com/book" 定义了一个名为 book 的命名空间,用于描述书籍相关的元素。
  • xmlns:author="http://www.example.com/author" 定义了一个名为 author 的命名空间,用于描述作者相关的元素。
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:book="http://www.example.com/book" xmlns:author="http://www.example.com/author"><book:title>The Great Gatsby</book:title><author:name>F. Scott Fitzgerald</author:name>
</document>

DOM4j解析XML:

1.DOM解析XML

DOM把XML文档映射成一个倒挂的树

访问DOM树节点:
<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo><Brand name="华为"><Type name="U8650"/><Type name="HW123"/><Type name="HW321"/></Brand><Brand name="苹果"><Type name="iPhone4"/></Brand>
</PhoneInfo>

package QuestionPpt02;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.List;public class UtilPhone {public static void main(String[] args) {//将xml文件加载到内存中  XM;解析器SAXReader saxReader = new SAXReader();//加载执行获取Document对象try {Document document = saxReader.read("D:\\idea-workspace\\Book03\\ch010\\src\\QuestionPpt02\\phone.xml");//获取根节点Element rootElement = document.getRootElement();//获取该节点下的所有子节点List<Element> Elist = rootElement.elements();for (Element e : Elist){System.out.println("子节点为_____________________"+e.getName()+"____________________________________");//获取当前点下所有子节点List<Element> EChild = e.elements();for (Element child : EChild){System.out.println("Brand的子节点为_________"+child.getName());System.out.println("获取当前节点属性"+child.attributeValue("name"));}//获取当前节点的属性System.out.println(  e.attributeValue("name"));}} catch (DocumentException e) {throw new RuntimeException(e);}}
}

具体的DOM4j的pdf地址:

"D:\AAAhz鸿卓\2Java三本书\高级编程\高级编程资料\dom4j解析XML.doc"

例题:

写入的时候需要获取文档对象读再获取写入对象

public class UtilsXml {public static void main(String[] args) {//读取XML//showXml();editXml();}/*** 修改文档内容*/public static void editXml(){try {//读取原有的文档//构建解析器SAXReader saxReader = new SAXReader();//通过read方法获得doc对象Document document = saxReader.read("ch10/students.xml");//获得根节点Element root =  document.getRootElement();List<Element> elementList = root.elements();for(Element element:elementList){if("1002".equals(element.attributeValue("id"))){element.element("name").setText("王五");}}//新增节点Element stu = root.addElement("stu");stu.addAttribute("id","1003");stu.addElement("name").setText("马六");stu.addElement("age").setText("20");stu.addElement("score").addAttribute("value","77");//document 写入students.xmlXMLWriter xmlWriter = new XMLWriter(new FileWriter("ch10/students.xml"));xmlWriter.write(document);xmlWriter.close();} catch (Exception e) {e.printStackTrace();}}public static void showXml(){try {//构建解析器SAXReader saxReader = new SAXReader();//通过read方法获得doc对象Document document = saxReader.read("ch10/students.xml");//获得根节点Element root =  document.getRootElement();//打印根节点名称System.out.println("根节点:"+root.getName());//获得所有子节点List<Element> elements = root.elements();for(Element element : elements){System.out.println("---------stu--------");//获得每个子节点上的id属性值String id = element.attributeValue("id");System.out.println("id:"+id);//获得stu下name元素节点Element name = element.element("name");System.out.println("name:"+name.getText());Element age = element.element("age");System.out.println("age:"+age.getText());Element score = element.element("score");System.out.println("score:"+score.attributeValue("value"));}} catch (Exception e) {e.printStackTrace();}}
}

dom4j解析XML:

1.读取xml文件 SAXReader()

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

2.获取XML根节点getRootElement()

Element rootElement = document.getRootElement();

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

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

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

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

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

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

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

newelement.setText("内容");

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

elenent.getText()

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

e.elementText(“book”)

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

e.attributeValue("name")

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

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

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

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

13.新XML添加Documen对象

通过DocumentHelper.creatDocument()创建一个Document对象

Document read = DocumentHelper.createDocument();

14.设置XML编码

通过OutputFormat的静态方法createPrettyPrint()创建OutputFormat对象,并设置编码集

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

15.写入XML文件

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145384.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业内网安全

企业内网安全 1.安全域2.终端安全3.网络安全网络入侵检测系统异常访问检测系统隐蔽信道检测系统 4.服务器安全基础安全配置入侵防护检测 5.重点应用安全活动目录邮件系统VPN堡垒机 6.蜜罐体系建设蜜域名蜜网站蜜端口蜜服务蜜库蜜表蜜文件全民皆兵 1.安全域 企业出于不同安全防…

[备忘]测算.net中对象所占用的内存

.net 基础库中应该是没有直接提供计算某个对象所占内存的方法。简单查了下&#xff0c;找到几种方式&#xff1a; 1、运行态用工具进行内存分析 比如&#xff0c;微软这篇教程中有介绍。《使用 .NET 对象分配工具分析内存使用情况》https://learn.microsoft.com/zh-cn/visuals…

优数:助力更高效的边缘计算

在数字化时代的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。随着物联网&#xff08;IoT&#xff09;设备的激增和5G技术的兴起&#xff0c;我们正迅速步入一个新时代&#xff0c;在这个时代中&#xff0c;数据不仅在量上爆炸性增长&#xff0c;更在速度和实时性上提出了…

idea 恢复 pom 文件呈现灰色并带删除线

今天在 idea 中导入别人的项目时发现有几个 pom 文件是灰色的并带删除线。 可以用以下方式解决&#xff1a; 打开file - settings - build,execution,deployment - Build Tools - Maven - Ignored Files 把 pom.xml 前面的复选框去掉&#xff0c;去掉之后&#xff0c;点击 appl…

IMS 中private user id/public user id的格式

private user identity(IMPI)的格式为 "<IMSI>ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org" public user identity SIP URI 格式为 sip:usernamedomain&#xff1b;而Tel URI 格式为 tel:<CC><NDC><SN> temporary public user ide…

linux安装nginx+前端部署vue项目(实际测试react项目也可以)

&#x1f9f8;本篇博客作者测试上线过不下5个项目&#xff0c;包括单纯的静态资源&#xff0c;vue项目和react项目&#xff0c;包好用&#xff0c;请放心使用 &#x1f4dc;作者首页&#xff1a;dream_ready-CSDN博客 &#x1f4dc;有任何问题都可以评论留言&#xff0c;作者将…

无人机飞手教员培训及就业分析

无人机飞手教员培训是一个综合性的教育体系&#xff0c;旨在培养具备专业飞行技能、扎实理论知识以及高效教学能力的无人机飞手导师。培训内容广泛覆盖从无人机基础知识到高级飞行技巧&#xff0c;再到教学方法与技巧&#xff0c;确保学员能够全面掌握无人机操作与教学的精髓。…

pcdn盒子连接方式

连接方式 大部分连接方式如下 光猫拨号 → 路由器 → 盒子 优点&#xff1a;光猫负责拨号&#xff0c;路由器只需做路由转发&#xff0c;性能要求不高缺点&#xff1a;光猫会有一层nat&#xff0c;路由器还有一层nat&#xff0c;两层nat需要在两个设备上都做nat优化注意&…

macOS 中搭建 Flutter 开发环境

如果你的 Mac 是 Apple silicon 处理器&#xff0c;那么有些 Flutter 组件就需要通过 Rosetta 2 来转换适配&#xff08;详情&#xff09;。要在 Apple silicon 处理器上运行所有 Flutter 组件&#xff0c;请运行以下指令来安装 Rosetta 2。 sudo softwareupdate --install-ro…

最新LinPay码支付 免签支付系统源码 免授权版本(含搭建教程)

最新LinPay码支付 免签支付系统源码 免授权版本 服务集成商兼容市面所有易支付&#xff0c;兼容所有商城LinPay是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI&#xff0c;让您能更方便快捷地解决知识付费和运营赞助的难…

ChatGPT搭上langchain的知识库RAG应用,效果超预期

最近利用LangchainChatGPT实现了上传文档实现个人知识库应用的能力&#xff0c;效果比想象得要好。文末大家可以体验一下效果~~ 给大家大致介绍下实现方式&#xff0c;参考了Langchain chatchat。 一、LangchainChatGPT 1、概述 LangChain 是一个强大的框架&#xff0c;可以…

CDA Level 1 业务数据分析

目录 理解业务数据分析方法、掌握业务数据分析流程、能够使用及设计创建业务指标、能够结合业务模型及业务分析方法正确理解业务问题&#xff0c;找到问题原因&#xff0c;并能够提出解决问题建议&#xff0c;这个章节的应用会考的比较多&#xff08;终于正经起来了呢&#xf…

Vue 项目中引入 Axios 详解

Vue 项目中引入 Axios 详解 在 Vue 项目中&#xff0c;axios 是一个非常流行的 HTTP 客户端&#xff0c;用于向服务器发送请求并处理响应。本文将详细说明如何在 Vue 项目中引入 Axios 插件&#xff0c;以及如何进行基本的配置&#xff0c;包括构建、配置域名、设置全局错误拦…

【PyTorch】autograd与逻辑回归

autograd – 自动求导系统 torch.autograd autograd torch.autograd.backward 功能&#xff1a;自动求取梯度 tensor&#xff1a;用于求导的张量&#xff0c;如lossretain_graph&#xff1a;保存计算图create_graph&#xff1a;创建导数计算图&#xff0c;用于高阶求导gra…

Superset 使用指南之优化数据可视化性能与扩展

1. Superset 概述 什么是 Apache Superset&#xff1f; Apache Superset 是一个开源、现代化的数据可视化和数据探索平台。它通过提供直观的用户界面&#xff0c;使用户能够轻松创建复杂的图表和仪表板&#xff0c;探索海量数据&#xff0c;同时避免传统商业智能&#xff08;…

vue项目引入比较独特的字体的方法

引入字体的步骤 前言&#xff08;步骤一&#xff09;引入的文件OPPOSans-M.ttf,TencentSans-W3.ttf,TencentSans-W7.ttf,YouSheBiaoTiHei.ttf (步骤二)font.css(步骤三) 全局引入在使用的地方的展示效果展示 前言 公司这边开发一个可视化大屏&#xff0c;UI小姐姐设置了很多比…

安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 用户要定制一些系统显示的设备型号和设备名称,这就需要我们分析设置里面的相关信息来找到对应的位置进行修改了。 2.问题分析 像这种信息要么是config.xml里面写死了,要…

ES6 -- 2015

学习视频 1. let和const 1.1 let 变量必须先声明再使用同一变量不能重复声明变量有块级作用域 1.2 const 声明常量&#xff0c;常量不能改变常量必须有初始值&#xff0c;不能先声明再赋值 2. 解构 1 数组解构 保持左右的结构一样&#xff0c;安装顺序一一对应 完全解构…

Knife4j 一款基于Swagger的开源文档管理工具

一、简单介绍 1.1 简介 Knife4j 是一款基于Swagger的开源文档管理工具&#xff0c;主要用于生成和管理 API 文档 二、使用步骤&#xff1a; 2.1 添加依赖&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spr…

三维手势 handpose 3D RGB 手势3D建模 三维建模-手势舞 >> DataBall

请关注即将发布 handpose x plus 项目 三维手势 handpose 3D RGB 单目相机手势识别 手语 歌曲 Friends 手势检测 手势3D建模 三维建模 咨询合作 DataBall 项目&#xff0c;欢迎加以下微信。 助力快速掌握数据集的信息和使用方式。