“怎麼樣了?”
“太好了。不能抱怨。今天 Bilaabo 告訴我關於 JavaScript 的事。當然不是全部,但不僅僅是一點點。當然,我還沒有用 JS 寫過任何東西,但我認為這不會是難的。”
“Ellie 向我介紹了 JSON 序列化。你解釋了 Jackson 框架以及如何使用註釋設置‘多態反序列化’。”
“不可能!你現在很聰明,阿米戈!一個真正的種馬!”
“然後還有一些!”
“好的。讓我們開始工作吧。今天我們有一個有趣的新話題: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’的意思是‘ XML — name 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 代碼 |
---|---|
|
<代碼> 如果(a < b) System.out.println( " a 是最小值" ); </代碼> |
“呃……看起來不太好看。”
“你會記得在 Java 中,一些字符也會被轉義嗎?例如,“\”。而且在寫入 String 時,這個序列也必須寫入兩次?所以這很常見。”
“好的。”
“這就是我今天的全部內容。”
“萬歲,終於可以休息了。”
GO TO FULL VERSION