“怎么样了?”

“太好了。不能抱怨。今天 Bilaabo 告诉我关于 JavaScript 的事。当然不是全部,但不仅仅是一点点。当然,我还没有用 JS 写过任何东西,但我认为这不会是难的。”

“Ellie 向我介绍了 JSON 序列化。你解释了 Jackson 框架以及如何使用注释设置‘多态反序列化’。”

“不可能!你现在很聪明,阿米戈!一个真正的种马!”

“然后还有一些!”

“好的。让我们开始工作吧。今天我们有一个有趣的新话题:XML。

XML,序列化为 XML - 1

“XML 是一种表示数据的标准,可以很容易地被人类读取——甚至更容易被程序读取。下面是一个 XML 文件示例:”

XML
<data>
<owner first="Adam" last="Shelton">
<address>London</address>
</owner>
<cat name="Missy" age="15"/>
</data>

“XML 的基础是标签。标签是尖括号中的一个词(大于号和小于号)。有开始和结束标签。每个开始标签都有一个对应的结束标签。开始标签可以有属性。 “

“标签可以嵌套在标签内,从而创建一个元素树。顶级标签称为根:它有子标签,而子标签又有自己的子标签。”

“这里有些例子:”

标签 描述
<数据> 打开数据标签
</数据> 结束数据标签
<猫 =“大小姐年龄=“ 15 ”> 具有属性的标签。属性值用引号括起来
<data>
<owner>
<cat name = "Missy"/>
</owner>
</data>
嵌套标签。
<猫名=“大小姐”年龄=“15”  /> 自闭标签。
这样的标签不需要结束标签。
而且他们不能有子标签。
<info>
任何类型的信息都可以在这里
</info>
标签可以包含文本数据
<info>
任何类型的
<data xxx = "yyy">
</data>
信息
<data 2xxx = "yyy"/>
都可以在这里
</info>
一个标签可能包含散布在其他标签中的文本数据。

“看起来很简单,有哪些标签?”

“任何一种。没有保留标签。XML 是一种描述任何数据的语言。人们想出满足他们需要的标签,并就如何使用它们达成一致。”

“从本质上讲,XML 是一种将数据写入计算机可以理解的元素树的方法。”

“我想我现在明白了。顺便问一下,我有一个问题。”

“JSON 用于将数据从浏览器发送到服务器,但是 XML 用在什么地方?”

“在使用 JSON 的相同地方:用于存储和发送数据。”

“好,我们继续。”

“想象一下,你有一个共享的 XML 文件,它存储了一个由 20 个人编写的程序的数据。他们每个人都有自己的标签,他们很快就开始相互干扰。”

“为了确保标签是唯一的,发明了前缀。这就是它们的样子:”

标签 描述
<动物:猫> 带有动物前缀的猫标签
<动物:猫>
</动物:猫>
<动物园:猫>
</动物园:猫>
两个带有不同前缀的猫标签。
<动物 动物园名称=“MX”> 带有动物前缀的猫标签。带有zoo前缀的名称属性。

“前缀也称为命名空间。如果我们称它们为命名空间,那么表中的最后一个描述将变为‘具有动物命名空间的猫标签。具有动物园命名空间的名称属性。’”

“顺便说一下,你还记得在 Java 中每个类都有一个短名称和一个包含包名称的唯一长名称,在导入包时也指定了包名称吗?”

“是的。”

“嗯,前缀也有唯一的长名,导入的时候也是指定的:

例子
< data  xmlns:soap="http://cxf.apache.org/bindings/soap" > <
 soap : item> 
< soap :info/> 
</ soap :item > 
</data>

“‘ xml ns : soap’的意思是‘ XMLname s pace SOAP’”

“您还可以设置没有前缀的标签的唯一名称:

例子
<data xmlns = "http://www.springframework.org/schema/beans" 
xmlns: soap = "http://cxf.apache.org/bindings/soap" 
xmlns:task = "http://www.springframework .org/schema/task" > 
< soap :item> 
< soap :info/> 
< task :info/> 
</ soap :item> 
</data>

“'xmlns=…'为空前缀设置命名空间。换句话说,它为没有前缀的标签设置命名空间,例如上例中的数据。”

“您可以在文档中拥有任意数量的命名空间,但每个命名空间都必须具有唯一的名称。”

“我明白了。为什么这些命名空间有这么奇怪的唯一名称?”

“它们通常指示指向描述命名空间和/或其 XML 标记的文档的 URL。”

“你今天甩了我很多信息,还有什么?”

“还有一点。”

“首先,XML有一个头部。它是描述XML版本和文件编码的特殊行。”它通常是这样的:

“它通常看起来像这样:”

例子
<?xml 版本= "1.0" 编码= "UTF-8"?>
<数据 xmlns:soap = "http://cxf.apache.org/bindings/soap">
<肥皂:项目>
<肥皂:信息/>
</肥皂:项目>
</数据>

“您还可以向 XML 添加注释。要开始注释,请使用 '<!--'。要结束它,请使用 '-->'。”

例子
<?xml version = "1.0" encoding = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<soap:item>
<!-- <soap:info/> -->
</soap:item>
<!-- This is also a comment  -->
</data>

“我现在明白了。”

“某些符号(<>”&)在XML中有特殊的含义,所以不能在别处使用。我们可以使用转义序列来绕过这个限制——一组用于表示其他字符/符号的字符。这里是其中的一些:”

转义序列 它替换的符号
& &
«
< <
> >
'

“这里是一个嵌入 XML 的代码示例:”

Java代码 XML 中的 Java 代码
if (a < b)
System.out.println("a is minimum");
<代码>
如果(a  <  b)
 System.out.println( " a 是最小值" );
</代码>

“呃……看起来不太好看。”

“你会记得在 Java 中,一些字符也会被转义吗?例如,“\”。而且在写入 String 时,这个序列也必须写入两次?所以这很常见。”

“好的。”

“这就是我今天的全部内容。”

“万岁,终于可以休息了。”