当前位置: 首页 > news >正文

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) +'}';}
}

相关文章:

  • mybatis-plus阻止全表更新与删除
  • Wavesurfer.js绘制波形图
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • 软考高级难度排行榜,哪个科目相对较容易呢?
  • web前端游戏项目-堆木头游戏【附源码】
  • apache poi_5.2.5 实现表格内某一段单元格的复制
  • 通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能
  • 【ARMv8M Cortex-M33 系列 1 -- SAU 介绍】
  • 3. BlazorSignalRApp 结合使用 ASP.NET Core SignalR 和 Blazor
  • 【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型
  • 华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录
  • Pycharm报的一些Python语法错误
  • SpringIOC之MethodBasedEvaluationContext
  • Springboot+vue的装饰工程管理系统(有报告),Javaee项目,springboot vue前后端分离项目
  • 电子科大软件测试~第三次作业
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ES学习笔记(12)--Symbol
  • git 常用命令
  • Java,console输出实时的转向GUI textbox
  • Javascript 原型链
  • JS变量作用域
  • leetcode-27. Remove Element
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • node入门
  • vue数据传递--我有特殊的实现技巧
  • 闭包--闭包作用之保存(一)
  • 程序员最讨厌的9句话,你可有补充?
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 突破自己的技术思维
  • 微信小程序开发问题汇总
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 译米田引理
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • const的用法,特别是用在函数前面与后面的区别
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 如何正确理解,内页权重高于首页?
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #Ubuntu(修改root信息)
  • (07)Hive——窗口函数详解
  • (poj1.3.2)1791(构造法模拟)
  • (八)Flask之app.route装饰器函数的参数
  • (编译到47%失败)to be deleted
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net Core和.Net Standard直观理解
  • .Net的DataSet直接与SQL2005交互
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /var/lib/dpkg/lock 锁定问题
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...