顯示具有 xml 標籤的文章。 顯示所有文章
顯示具有 xml 標籤的文章。 顯示所有文章

2012年3月12日 星期一

[xml]遇到escape也無用,才知道 CDATA 的好

我以前非常的直觀,覺得只要有 escape 特殊符號,就可以解決任何事,
(http://codebeta.blogspot.com/2010/09/xmlescape.html)
直到我遇到一個情況:
在 WebService (http + soap) 裡,內容是xml,裡面又一層 xml。
當微軟的元件(我只用過微軟的開發工具,但我想其他的工具也許也一樣),
把 soap 內容(第一層的 xml)轉回來的時候,也裡面那層的也一起轉換了。
所以內容的 DOM 結構跟預期的不同。

<a><b></b><c>&lt;c1&gt;abcd&lt;/c1&gt;</c><d></d></a>  <!--本來的樣子 c 的內容是個 c1 element 已跳脫—>

<a><b></b><c><c1>abcd</c1></c><d></d></a>  <!--實際的樣子 導致取 c 內容(innerText)不如預期的 &lt;c1&gt;abcd&lt;/c1&gt; 影響後續程式動作-->

這時,應該就是使用 CDATA 來標示內容為文字,避免錯誤。
像這樣:

<a><b></b><c><![CDATA[<c1>abcd</c1>]]></c><d></d></a>

2010年10月21日 星期四

[xml]xml formatter

常常遇到別人寄來的xml沒有縮排,因為都是用機器產生的。
如果要看,雖然可以用瀏覽器來看,但是要手動改幾個內容,還是會找不到位置。
隨手用dot net寫一個,自己用一用,記錄下來以免忘了。

xdoc = new XmlDocument();
xdoc.Load(inputname);
XmlWriterSettings xws = new XmlWriterSettings();
xws.Indent = true;
xws.Encoding = System.Text.Encoding.UTF8;
XmlWriter xw = XmlWriter.Create(outputname, xws);
xdoc.WriteTo(xw);
xw.Flush();
xw.Close();

就這幾行,把inputname及outputname指定了,就搞定了。

2010年9月13日 星期一

[xml]escape

為了要在 xml 裡傳遞另一個 xml。要把被傳的那一個先變成一般的字串。那麼,<, >, 這類的被 xml 拿來當做分隔符號的符號,就要被轉換成其他樣子啦。到底,有哪些符號需要被轉換呢?

原來 轉換
> &gt;
< &lt;
& &amp;
" &quot;
' &apos;

好像就這麼 5 個就行了。