Xml 与 JSON 解析

xml

1.XML概述

1.什么是XML?
XML (eXtensible Markup Language)指可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。

XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准

xml是一种非常灵活的语言,没有固定的标签,所有的标签都可以自定义。

2.XML的用途?
通常,xml被用于信息的记录和传递,因此xml经常被用于充当配置文件。

3.XML 仅仅是纯文本
XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。

不过,能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。

4.xml的格式
在这里插入图片描述
!](https://img-blog.csdnimg.cn/20210704074402767.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Fsd2F5c2Nodw==,size_16,color_FFFFFF,t_70)

//1.声明信息,用户描述xml的版本和编码方式
<?xml version="1.0" encoding="UTF-8?>
//2.根元素,有且仅有一个根元素
//3.xml大小写敏感
//4.标签成对,需要正确嵌套
//5.属性只要使用双引号
<book id="fa">
//注释的语法跟HTML相同

5.XML 不会替代 HTML,理解这一点很重要。在大多数 web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。
XML 无所不在。XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。
对 XML 最好的描述是:

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

6.XML 没有预定义的标签

在 HTML 中使用的标签(以及 HTML 的结构)是预定义的。HTML 文档只使用在 HTML 标准中定义过的标签(比如 < p > 、< h1 > 等等)。

XML 允许创作者定义自己的标签和自己的文档结构。

练习:

<?xml version="1.0" encoding="UTF-8"?>
<scores>
	<student id="1">
		<name>MengYangChen</name>
		<course>xml</course>
		<score>99</score>
	</student>
		<name>XingKong</name>
		<course>xml</course>
		<score>99.9</score>
	<student id="2">
	</student>
</scores>

8.有效的XML文档
7.1 首先必须是格式良好的。
7.2 使用DTD和XSD(XML Schema)定义约束。

2.DTD

1.什么是DTD?
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
DTD(Document Type Defination )文档类型定义。
DTD用于约束xml的文档格式,保证xml是一个有效的xml。
2.DTD可以分为两种,内部DTD,外部DTD。

2.内部DTD的定义
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

数量词
+: 表示出现1次或多次,至少一次。

?:表示出现0次或1次。

*: 表示出现任意次。

2.1.元素声明语法

<!ELEMENT 元素名称 (元素内容)>

2.2.属性声明语法
属性类型:CDATA,表示字符数据(character data)
默认值:REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

如:<!ATTLIST payment type CDATA "check">

<?xml version="1.0" encoding="UTF-8"?>
<!--声明内部DTD-->
<!DOCTYPE scores[
<!ELEMENT scores (student)>
<!ELEMENT stuent(name,course,score)>
<!ATTLIST stuent id CDATA #IMPLIED>
<!ELEMENT  name (#PCDATA)>
]>
<scores>
	<student id="1">
		<name>MengYangChen</name>
		<course>xml</course>
		<score>99</score>
	</student>
		<name>XingKong</name>
		<course>xml</course>
		<score>99.9</score>
	<student id="2">
	</student>
</scores>

2.3 外部定义DTD
在xml中引入外部的DTD文件。

关于XSD
XML Schema是DTD的替代者。
不仅可以定义XML文档的结构,还可以规范文档的内容。

3.XML的解析

对xml文件进行操作,包括创建xml,对xml文件进行增删改查操作。

3.1 常见的xml解析技术

DOM解析
官方提供的解析方式(sun)
基于xml树解析。

SAX解析
是民间解析方式,基于事件的解析
适用于数据量较大的XML.

JDOM解析
开放源码,比DOM更快,使用类

DOM4J解析
第三方,开源免费,是JDOM的升级版,使用接口

3.2 DOM4J解析xml
解析xml的入口,是需要先拿到一个Document对象。
读取xml文件
1.导入dom4j.jar包
2.编写程序
在这里插入图片描述

dom4j创建xml

1.通过DocumentHelper生成一个Document对象。
Document doc =DocumentHelper.createDocument();

2.添加根元素
Element root = doc.addElement(“books”);

3.为根元素添加子元素
Element book =root.addElement(“book”);

4.为book元素添加属性(可以链式编程)
book.addAttribute(“id”,“bo1”);

5.为book添加子元素
Element name book.addElement=book.addElement(“name”);

6.为子元素添加文本
name.addText(“Think in Java”);

7.将doc输出到xml文件中即可
Writer writer = new FileWriter(new File(“src/book.xml”);
doc.write(writer);

或者用格式良好的输出(缩进)
OutputFormat format =OutputFormat.createPrettyPrint();

XMLWriter writer = new XMLWriter(new FileWriter(new File(“src/book.xml”);
8.关闭资源
writer.close();

json

JSON(JavaScriptObject Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgramming Language, StandardECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

“名称/值”对的集合(Acollection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyedlist),或者关联数组 (associativearray)。

值的有序列表(Anordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON具有以下这些形式:

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
在这里插入图片描述
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
在这里插入图片描述
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
在这里插入图片描述
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

字符串(string)与C或者Java的字符串非常相似。
在这里插入图片描述
数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
在这里插入图片描述
空白可以加入到任何符号之间。


一、什么是 JSON ?

· JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

· JSON 是轻量级的文本数据交换格式

· JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。

· JSON 具有自我描述性,更易理解

二、与 XML 相同之处
· JSON 是纯文本

· JSON 具有"自我描述性"(人类可读)

· JSON 具有层级结构(值中存在值)

· JSON 可通过 JavaScript 进行解析

· JSON 数据可使用 AJAX 进行传输


三、与 XML 不同之处
· 没有结束标签

· 更短

· 读写的速度更快

· 能够使用内建的 JavaScript eval() 方法进行解析

· 使用数组

· 不使用保留字


四、为什么使用 JSON?
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

· 读取 XML 文档

· 使用 XML DOM 来循环遍历文档

· 读取值并存储在变量中

使用 JSON

· 读取 JSON 字符串

· 用 eval() 处理 JSON 字符串


五、JSON 语法规则
JSON 语法是 JavaScript 对象表示语法的子集。

· 数据在名称/值对中

· 数据由逗号分隔

· 大括号保存对象

· 中括号保存数组


六、JSON 名称/值对
JSON 数据的书写格式是:名称/值对。

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

“firstName”: “John”

这很容易理解,等价于这条 JavaScript 语句:

firstName =“John”


七、JSON 值
JSON 值可以是:

· 数字(整数或浮点数)

· 字符串(在双引号中)

· 逻辑值(true 或 false)

· 数组(在中括号中)

· 对象(在大括号中)

· null


八、JSON 数字
JSON 数字可以是整型或者浮点型:

{“age”:30}


九、JSON 对象
JSON 对象在大括号({})中书写:

对象可以包含多个名称/值对:

{ “firstName”:“John”,“lastName”:“Doe”}

这一点也容易理解,与这条 JavaScript 语句等价:

firstName =“John”

lastName =“Doe”

1.JSON 对象使用在大括号({})中书写。
对象可以包含多个 key/value(键/值)对。

key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

key 和 value 中使用冒号(:)分割。

每个 key/value 对使用逗号(,)分割。

2.访问对象值
你可以使用点号(.)来访问对象的值:
实例

varmyObj, x;

myObj = {

               "name":"google",

               "alexa":10000,

               "site":null};

x = myObj.name;

你也可以使用中括号([])来访问对象的值:

实例

varmyObj, x;

myObj = {

               "name":"google",

               "alexa":10000,

               "site":null};

x = myObj[“name”];

3.循环对象
你可以使用 for-in 来循环对象的属性:

实例

varmyObj = {

               "name":"google",

               "alexa":10000,

               "site":null

};

for(xinmyObj){

               document.getElementById("demo").innerHTML += x + "<br>";

}

在 for-in 循环对象的属性时,使用中括号([])来访问属性的值:

实例

varmyObj = {

               "name":"google",

               "alexa":10000,

               "site":null

};

for(xinmyObj){

               document.getElementById("demo").innerHTML += myObj[x] + "<br>";

}

4.嵌套 JSON 对象
JSON 对象中可以包含另外一个 JSON 对象:

实例

myObj = {

               "name":"google",

               "alexa":10000,

               "sites": {

                                 "site1":"www.google.com",

                                 "site2":"m.google.com",

                                 "site3":"c.google.com"

               }

}

你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。

实例

x = myObj.sites.site1; // 或者x = myObj.sites[“site1”];

5.修改值
你可以使用点号(.)来修改 JSON 对象的值:

实例

myObj.sites.site1 = “www.google.com”;

你可以使用中括号([])来修改 JSON 对象的值:

实例

myObj.sites[“site1”] = “www.google.com”;

6.删除对象属性
我们可以使用 delete 关键字来删除 JSON 对象的属性:

实例

deletemyObj.sites.site1;

你可以使用中括号([])来删除 JSON 对象的属性:

实例

deletemyObj.sites[“site1”]


十、JSON 数组
JSON 数组在中括号中书写:

数组可包含多个对象:

{

          "employees":[

                        {"firstName":"John","lastName":"Doe"},

                        { "firstName":"Anna","lastName":"Smith"},

                        {"firstName":"Peter","lastName":"Jones"}

               ]

}

在上面的例子中,对象"employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
JSON 数组在中括号中书写。

JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

JavaScript 中,数组值可以是以上的 JSON数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined。

1.JSON 对象中的数组
对象属性的值可以是一个数组:

实例

{

    "name":"网站",

    "num":3,

    "sites":["Google", "Runoob", "Taobao"]

}

我们可以使用索引值来访问数组:

实例

x = myObj.sites[0];

2.循环数组
你可以使用 for-in 来访问数组:

实例

for(iinmyObj.sites){

    x += myObj.sites[i] + "<br>";

}

你也可以使用 for 循环:

实例

for(i = 0; i < myObj.sites.length; i++){

    x += myObj.sites[i] + "<br>";

}

3.嵌套 JSON 对象中的数组
JSON 对象中数组可以包含另外一个数组,或者另外一个 JSON 对象:

实例

myObj = {

    "name":"网站",

    "num":3,

    "sites": [

    {

            "name":"Google",

            "info":["Android", "Google 搜索", "Google 翻译"]

    },  

    {

            "name":"Taobao",

            "info":["淘宝", "网购"]

    }]

}

我们可以使用for-in 来循环访问每个数组:

实例

for(iinmyObj.sites){

    x += "<h1>" + myObj.sites[i].name + "</h1>";

    for(jinmyObj.sites[i].info){

            x += myObj.sites[i].info[j] + "<br>";

    }

}

4.修改数组值
你可以使用索引值来修改数组值:

实例

myObj.sites[1] = “Github”;

5.删除数组元素
我们可以使用 delete 关键字来删除数组元素:

实例

deletemyObj.sites[1];


十一、JSON 布尔值
JSON 布尔值可以是 true 或者 false:

{“flag”:true}


十二、JSON null
JSON 可以设置 null 值:

{“name”:null}


十三、JSON 使用 JavaScript 语法
因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。

通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:

实例

varsites = [

          {"name":"google" , "url":"www.google.com"},

          {"name":"微博" , "url":"www.weibo.com"}

];

可以像这样访问JavaScript 对象数组中的第一项(索引从 0 开始):

sites[0].name;

返回的内容是:

runoob

可以像这样修改数据:

sites[0].name=“菜鸟教程”;


十四、JSON 文件
· JSON 文件的文件类型是 “.json”

· JSON 文本的 MIME 类型是 “application/json”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值