XML&JSON入门 (持续更新)


软件与软件交流的语言
C语言和Java语言交流
后端是JAVA,客户端:C/GO/Python
不同的编程语言对象的组织格式不同
XML&JSON通常指的是字符串
JSON解析速度更快

  • XML /JSON 具有平台(系统平台无关,语言解析看到的效果一样)无关性,是独立于编程语言的标记语言
  • XML具有自我描述能力 (自己介绍自己)

Why XML&JSON?

JavaScript Object Notation:轻量级数据交换格式 (05/06年成为主流格式),机器解析快,数据传输快,程序猿解析起来也方便JavaScript test
对象格式:比如一本书,有书名,属性
eXtensible Markup Language:

  1. 用于网络数据传输
    (比如通过一段数据发送明显有区别的内容:账户名 和 密码 或者发送JAVA对象? 【无法跨语言】
    一般思路:比如用一些特殊符号拆分,但是如果账户名有特殊符号就会出错,有层次清晰的区分内容
  2. 配置文件(配置程序所产生的缓存文件文件夹,切换数据库) 一般不需要写代码去解析文件,比如框架的配置文件
  3. 数据存储(多个软件产生的数据互通,比如头像的地址)

XML 文件 或者 XML语言?

.xml文件是保存数据的一种方式
XML数据也可以以其他方式存在(如存在内存中用于构建XML数据)
不要错误的以为xml语言就是XML文件

XML语法格式

标记(别名:元素/标签/节点)

  1. XML文档声明
<?xml version = "1.0" encoding = "utf-8"?>
  1. 开放标记/闭合标记
  • 开放标记:<名称>
  • 闭合标记:</名称>
  • 标记内容:在开放标记 和 闭合标记之间的部分

自定义名称规则:

  1. name可以包含字母/数字/其他字符
  2. 不能以数字/标点符号开始
  3. 不能包含空格,冒号(:)
  4. 不能以字符“xml”开始(大小写均不可以)
  5. 名称是大小写区分的
  • 标记允许嵌套 但是不能交叉
  • 有且仅有一个根标记 就是最外层只能有一个树根标记

属性

1.标签的开始位置可以有多个属性(但属性不能重复),
2.但是属性内容必须被引号包裹,每个属性都是键值对
3.属性直接用空格隔开

<person id = "101" groupid = “1”>RichardWWHH</person>

注释

⚠️ 注释不可以在文档声明之前
⚠️ 注释不可嵌套
格式:

注释开始: <!--
注释结束: -->

CDATA

CDATA是不应该由XML解析的文本数据
比如说“<”会被视为新元素的开始,"&“会被视为字符实体开始,但是JavaScript中包含了大量的“<”,”&"
CDATA格式

开始: <![CDATA[
结束: ]]>
比如说:
<test>
	<![CDATA[ Hello<&>Hello ]]>
</test>

nameSpace(命名空间)

限制标签的可扩展性,也可以解决标签名字在不同内容中冲突的情况

DOM4j包解析XML

  1. 创建一个XML文件的输入流
    无论是网络的 或者是本地的XML
    比如:我们的实例XML test.xml存在Desktop中
<books>
<book id="101">
<name>Lord of Rings</name>
<info>Tells nothing</info>
</book>
<book id="102">
<name>Old man and Sea</name>
<info>Fishing</info>
</book>
</books>

那么我们的解析代码如下:
1.创建

String path = "Desktop/test.xml"
FileInputStream fileInputStream = new FileInputStream(new File(path));
  1. 创建XML读取工具对象
SAXReader sax = new saxReader();
  1. 借助读取工具对象,读入XML的输入流,获得文档对象
Document doc = sax.read(fis);
  1. 获得文档对象,读取文档中的root元素对象
Element root = doc.getRootElement();
System.out.println(root.getName());//空
  1. 操作root对象中的Element 字段 对元素层级对象进行读取
Element book = root.element("book");
Element name = book.element("name");
//getText() 方法获取元素的内容
System.out.println(name.getText());//Lord of Rings
//从根结构开始遍历XML 文档
List<Element> xmlList = root.elements();
for(Element e : xmlList) {
	//通过Element对象的attributeValue() 和 elementText 
	//去访问属性值 和 内容
	System.out.println("Book ID: " + e.attributeValue("id"));
    System.out.println("Book name: " + e.elementText("name"));//直接获取 指定的 子元素的内容
    System.out.println("Book info: " + e.elementText("info"));
    System.out.println("---------");
}
  1. 不同语言中 对象格式 的不同之处
var book = new Object();
book.name = "Old man and sea";
book.info = "Fishing";

VS JAVA

//创建一个Book类,new对象
public class Main {
	static class Book {
		private String name;
		private String info;
	}
	public static void main(String[] args) {
		Book book = new Book();
		book.setName("Old man and sea");
		book.setInfo("Fishing");
	}
}

VS XML

<book>
	<name>"Old man and sea"</name>
	<info>"Fishing"</info>
</book>

VS JSON(名称外部的引号可以省略,但是JAVA解析会出现问题,最好不要省略)
元素值:字符串加上引号

{
	”name“: "Old man and sea",
	“info”: "Fishing"
}

JSON 存取和序列化操作的 jar包

GSON:
FastJSON:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值