XML简介 (EXtensible Markup Language)

2023-12-22 16:20

本文主要是介绍XML简介 (EXtensible Markup Language),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

XML简介 (EXtensible Markup Language)

可扩展标记语言

  • 特点
    • XML与操作系统、编程语言的开发平台无关
    • 实现不同系统之间的数据交换
  • 作用
    • 数据交互
    • 配置应用程序和网站
    • Ajax基石

XML标签

  • XML文档内容由一系列标签元素组成
<元素名 属性名="属性值">元素内容</元素名>
  • 属性值用双引号包裹
  • 一个元素可以有多个属性
  • 属性值中不能直接包含 < " &
  • 不建议使用的字符 ` >

XML编写注意事项

  • 注意事项
    • 所有XML元素都必须有结束标签
    • XML标签对大小写敏感
    • XML必须正确的嵌套
    • 同级标签以缩进对齐
    • 元素名称可以包含字母、数字或其他的字符
    • 元素名称不能以数字或者标点符号开始
    • 元素名称中不能包含空格
XML解析器
  • 解析器类型
    • 非验证解析器
      • 检查文档格式是否良好
    • 验证解析器
      • 使用DTD检查文档的有效性
XML命名空间
  • XML命名空间的作用
    • 解决在复杂 大型XML文件中 出现名称相同 但是含义不同的元素
<?xml version="1.0" encoding="UTF-8"?>
<cameras xmlns:canon="http://www.canon"
xmlns:nikon="http://www.nikon.com">
<canon:camera prodID="P663" name="Camera傻瓜相机"/>
<nikon:camera proID="K29B3" name="Camera超级35毫米相机"/>
</cameras>
解析XML技术
  • DOM
    • 基于XML文档树结构的解析
    • 适用于多次访问的XML文档
    • 特点:比较消耗资源
  • SAX
    • 基于事件的解析
    • 适用于大数据量的XML文档
    • 特点:占用资源少,内存消耗小
  • DOM4J
    • 非常优秀的Java XML API
    • 性能优异、功能强大
    • 开放源代码
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()获取元素名称

示例

<?xml version="1.0" encoding="UTF-8" ?>
<!--根标签只能有一对儿-->
<books><!--在标签内可以写属性--><!--转义符  > &gt;  < &lt; --><!--1.属性值必须要用引号包裹2.一个元素可以有多条属性3.尽量不要使用 < > --><book id="1" bookname="三体" price="12"/><book><id>1</id><bookname>三体</bookname><price>12</price></book><!--1. 所有的标签必须闭合--><!--2. xml的标签对大小写敏感--><!--3. 所有的xml标签 必须正确嵌套--><!--4. 同级标签需要对齐缩进--><!--5. 标签名称不能以数字或标点符号开始--></books>

练习

<?xml version="1.0" encoding="UTF-8" ?>
<clothes><cloth range="height&lt;165">S</cloth><cloth range="165&gt;height&lt;170">M</cloth><cloth range="170&gt;height&lt;175">L</cloth><cloth range="175&gt;height&lt;180">XL</cloth><cloth range="180&gt;height">XXL</cloth>
</clothes>

import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;public class Test01 {public static void main(String[] args) {//通过解析器解析XML文件SAXReader saxReader=new SAXReader();try {saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");} catch (DocumentException e) {e.printStackTrace();}}
}
增删改查

查询

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.Iterator;public class Test01 {public static void main(String[] args) {//通过解析器解析XML文件SAXReader saxReader=new SAXReader();try {//通过解析器获取文件对象  Document 文件文档Document document = saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");//获取根节点Element root = document.getRootElement();//获取根节点的迭代器Iterator iterator = root.elementIterator();while (iterator.hasNext()){//获取子节点元素 获取到的是cloth标签Element element=(Element) iterator.next();//获取子元素节点的属性System.out.println(element.attributeValue("range"));//获取子元素节点的文本内容System.out.println(element.getText());}} catch (DocumentException e) {e.printStackTrace();}}
}

public class Test03 {public static void main(String[] args) {Test02 test02=new Test02();//test02.add();//增加//test02.delete();//删除test02.update();//修改}
}
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;public class Test02 {//对xml文件进行增删改查private  Document document;/*** 初始化*/public  void init(){SAXReader saxReader=new SAXReader();try {document= saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");} catch (DocumentException e) {e.printStackTrace();}}/*** 给xml文件内添加节点*/public  void add(){init();//获取文档节点Element root=document.getRootElement();//在根节点下添加一个cloth节点Element cloth = root.addElement("cloth");cloth.addAttribute("id","123");cloth.addText("今天中午吃什么");save();System.out.println("添加成功!!");}/*** 保存文件*/public  void save(){//创建输出格式并设置输出编码OutputFormat format=OutputFormat.createCompactFormat();format.setEncoding("utf-8");try {XMLWriter xmlwriter=new XMLWriter(new FileWriter("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml"));xmlwriter.write(document);xmlwriter.close();} catch (IOException e) {e.printStackTrace();}}/*** 删除节点*/public void delete(){init();//获取根节点Element root=document.getRootElement();//获取根节点迭代器Iterator iterator=root.elementIterator();//遍历子节点while (iterator.hasNext()){//获取子节点对象Element e=(Element) iterator.next();if (e.getText().equals("今天中午吃什么")){//从父节点中删除本节点e.getParent().remove(e);System.out.println("删除成功!!!");}}save();}/*** 修改*/public void update(){init();Element root=document.getRootElement();Iterator iterator=root.elementIterator();while (iterator.hasNext()){Element e=(Element) iterator.next();// attributeValue 属性值if (e.attributeValue("id")!=null&&e.attributeValue("id").equals("123")){e.addAttribute("price","999");//给指定节点添加属性System.out.println("修改成功");break;}}save();}}

JOSN简介

  • JSON(JavaScript Object Notation)
    • 轻量级的文本数据交换格式
    • 具有自我描述性
    • 比XML传输速度快
      JSON最初用来表示JavaScript中的对象
JSON相互转换
public class Test {public static void main(String[] args) {Student student=new Student();student.setName("张三");student.setAge(18);student.setHobby(new String[]{"篮球", "足球", "乒乓球"});System.out.println(student);//对象如何转换成 Json 字符串String str = JSONObject.toJSONString(student);System.out.println(str);System.out.println("Json字符串转对象-------------------------------");//Json字符串如何转对象  解析对象Student s1 = JSONObject.parseObject(str, Student.class);System.out.println(s1.toString());}
}

重写toString()方法

import java.util.Arrays;public class Student {private String name;private Integer age;private String[] hobby;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String[] getHobby() {return hobby;}public void setHobby(String[] hobby) {this.hobby = hobby;}@Overridepublic String toString() {return "{" +"\"name\":\"" + name + '\"' +"\", age\":" + age +", \"hobby\":" + Arrays.toString(hobby) +'}';}
}

这篇关于XML简介 (EXtensible Markup Language)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524623

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.