“怎麼樣了?”

“太好了。不能抱怨。今天 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=…'為空前綴設置命名空間。換句話說,它為沒有前綴的標籤設置命名空間,例如上例中的數據。”

“您可以在文檔中擁有任意多個名稱空間,但每個名稱都必須具有唯一的名稱。”

“我明白了。為什麼這些命名空間有這麼奇怪的唯一名稱?”

“它們通常指示一個 URL,該 URL 指向描述命名空間和/或其 XML 標記的文檔。”

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

“還有一點。”

“首先,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 時,這個序列也必須寫入兩次?所以這很常見。”

“好的。”

“這就是我今天的全部內容。”

“萬歲,終於可以休息了。”