iT邦幫忙

DAY 25
9

XML系列 第 25

[XML]25-文件之特殊資料

此篇要介紹的是,XML對特定資料的另一種處理方式,就是忽略。
假設我使用XML來描述及記錄本系列文章第 4 篇以及其中所附的 XML 範例如下:

<?xml version="1.0"?>
<ironman2011>
	<article>
		<subject>[XML]04-資料交換格式</subject>
		<date>2011-10-01</date>
		<sampledata>
			<?xml version="1.0"?>
			<ipo:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ipo="http://www.altova.com/IPO" orderDate="2011-09-28" xsi:schemaLocation="http://www.altova.com/IPO ipo.xsd">
				<shipTo xsi:type="ipo:US-Address">
					<name>Helen Zoe</name>
					<street>47 Eden Street</street>
					<city>Cambridge</city>
					<state>NY</state>
					<zip>11111</zip>
				</shipTo>
				<billTo xsi:type="ipo:US-Address">
					<name>Robert Smith</name>
					<street>8 Oak Avenue</street>
					<city>Old Town</city>
					<state>AK</state>
					<zip>95819</zip>
				</billTo>
				<Items>
					<item partNum="811-AA">
						<productName>Delicious Crab</productName>
						<quantity>10</quantity>
						<price>120.33</price>
						<shipDate>2011-10-10</shipDate>
					</item>
					<item partNum="822-AA">
						<productName>Funny Toys</productName>
						<quantity>20</quantity>
						<price>240.50</price>
						<ipo:comment>Want this for the holidays!</ipo:comment>
						<shipDate>2011-10-12</shipDate>
					</item>
					<item partNum="833-AA">
						<productName>Lapis necklace</productName>
						<quantity>30</quantity>
						<price>128.99</price>
						<ipo:comment>Go ahead. Make my day.</ipo:comment>
						<shipDate>2011-10-15</shipDate>
					</item>
				</Items>
			</ipo:purchaseOrder>
		</sampledata>
	</article>
</ironman2011>

這樣子的寫法是乍看沒什麼問題,但是一驗證就會出現錯誤,第一個錯誤是第7列的<?xml version=”1.0”?>,一份 XML 文件只能有一個這個宣告。第二個問題是從列 7 到列 45 ,是所謂的「資料」(只是剛好這資料也是 XML 的型式)而不是「欄位」(欄位只有一個,就是 sampledata)。

XML 提供了「忽略」的機制,簡單說就是將所指定的資料範圍當成純資料來看待,不管裡面有 < 或 > 也不管,就是看成 raw data 就對了。這在 XML 的規格中,稱之為 CDATA sections。

實作上的寫法很簡單,只要用 <![CDATA[ 開頭,]]> 結尾,中間涵蓋的所有資料,都會被忽略不處理,原味重現。

前面那個例子,加上<![CDATA[及]]>後如下

<?xml version="1.0"?>
<ironman2011>
	<article>
		<subject>[XML]04-資料交換格式</subject>
		<date>2011-10-01</date>
		<sampledata>
			<![CDATA[
			<?xml version="1.0"?>
			<ipo:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ipo="http://www.altova.com/IPO" orderDate="2011-09-28" xsi:schemaLocation="http://www.altova.com/IPO ipo.xsd">
				<shipTo xsi:type="ipo:US-Address">
					<name>Helen Zoe</name>
					<street>47 Eden Street</street>
					<city>Cambridge</city>
					<state>NY</state>
					<zip>11111</zip>
				</shipTo>
				<billTo xsi:type="ipo:US-Address">
					<name>Robert Smith</name>
					<street>8 Oak Avenue</street>
					<city>Old Town</city>
					<state>AK</state>
					<zip>95819</zip>
				</billTo>
				<Items>
					<item partNum="811-AA">
						<productName>Delicious Crab</productName>
						<quantity>10</quantity>
						<price>120.33</price>
						<shipDate>2011-10-10</shipDate>
					</item>
					<item partNum="822-AA">
						<productName>Funny Toys</productName>
						<quantity>20</quantity>
						<price>240.50</price>
						<ipo:comment>Want this for the holidays!</ipo:comment>
						<shipDate>2011-10-12</shipDate>
					</item>
					<item partNum="833-AA">
						<productName>Lapis necklace</productName>
						<quantity>30</quantity>
						<price>128.99</price>
						<ipo:comment>Go ahead. Make my day.</ipo:comment>
						<shipDate>2011-10-15</shipDate>
					</item>
				</Items>
			</ipo:purchaseOrder>
			]]>
		</sampledata>
	</article>
</ironman2011>

可以看到在列 7 及列 47 ,加上了<![CDATA[及]]>,加入後在列 7 和列 47 之間的資料,就會被視為純資料處理。

本系列文章列表
Next : [XML]26-建置之Server端


上一篇
[XML]24-文件之名稱空間
下一篇
[XML]26-建置之Server端
系列文
XML30

1 則留言

0
SunAllen
iT邦高手 1 級 ‧ 2011-10-22 01:16:38

沙發 嗚,好久沒有坐著了

鐵殼心 iT邦高手 1 級 ‧ 2011-10-22 06:39:59 檢舉

擠一下吧開心

我要留言

立即登入留言