XML特殊字元與空格 換行 轉義符的程式碼詳細介紹

黄舟
發布: 2017-03-08 16:38:34
原創
3131 人瀏覽過


關於XAML中是如何處理空格的,MSDN上給出了詳細的描述:http://msdn.microsoft.com/en-us/library/cc189036%28v=VS.95%29. aspx#whitespace
摘重要的簡單說一下:
空格、回車、製表符都被當作空格。
連續的空格會被合併為一個空格。
後緊鄰的空格會被忽略。 前緊鄰的空格會被忽略。換句話說,解析器對中間的字串做Trim。
如何保留空格
給元素加上屬性xml:space="preserve"
設定了這個屬性之後,會保留元素中所有的空格,不會合併連續空格,也不會trim兩頭的空格。
這個方法有個不便,就是它會保留元素中所有的空格,哪怕這些空格是由程式碼格式規整化後產生的。這就意味著,你不能用ctrl+E,F這樣的快捷鍵來整理程式碼格式了,一旦不小心整理了,改回來都很麻煩。
 
因為XAML支援直接寫入Unicode程式碼,這串程式碼代表一個non breaking space.
複雜的文字
有複雜格式的文本,建議使用RichTextBox。
因為文字元素分為block和inline兩種,TextBlock只允許包含inline,所以用來展示少量的文字比較適合。
如果格式比較複雜,注意用好span,span與run的不同在於,span不會繼承父元素的格式,相當於重置格式,不受父元素格式的影響。
* 換行
在XAML輸入回車會被當作一個空格,所有換行要用
另外,兩個Run相鄰,如果是如下排列:

<Run>ab</Run>
<Run>cd</Run>
登入後複製

則顯示成:

ab
cd
登入後複製

會自動在兩個Run之間加上換行符號。
如果要讓回車去掉,顯示成abcd,則應該寫在一行裡:

<Run>ab</Run><Run>cd</Run>
登入後複製

* Tab
首先,XAML中沒有tab,只能用連續的空格來代替。
需要注意,在將一個string賦值給RichTextBox的Xaml屬性時,會合併掉連續的空格,所有如果要保留tab(連續的空格),需要進行這樣一個workaround:

private const string TAB = "    ";
private const string TAB_PLACEHOLDER = "===TAB===";

textBox1.Text = richTextBox1.Xaml;
string xaml = richTextBox1.Xaml;

xaml = xaml.Replace(TAB, TAB_PLACEHOLDER);

richTextBox2.Xaml = xaml;

foreach (Block block in richTextBox2.Blocks)
{
    foreach (Inline inline in ((Paragraph)block).Inlines)
    {
        ((Run)inline).Text = ((Run)inline).Text.Replace(TAB_PLACEHOLDER, TAB);
    }
}
登入後複製

先用一個佔位符來取代四個空格,這樣在給richTextBox的xaml屬性賦值的時候就不會合併空格了。
然後再替換這個佔位符,賦完值替換的時候不會進行合併。
================================================= ===
XAML被XML規則綁定。例如XML對幾個特殊字元有特別意義,像&,<,>。如果你嘗試用這些值來設定一個元素的內容,你可能會出錯,因為XAML解析器假設你正在試圖做某些事情,例如建立巢狀元素。你可以使用字元實體,例如<用<,>用>,&用&,"用" 特殊字元不是你運行XAML的一障礙,另外一個是空格處理。一個字串前,後,字串中的空格,TAB,回車鍵都會被忽略掉,只保留一個空格。你可以使用XML:space="preserve",保留任何空格,TAB,回車鍵。注意,這些規則只對XAML有用,如果你在程式碼中設定內容,任何空格都會保留。
特殊字元和空格
下面的字元在 [XML]中被定義為 空白(whitespace)字元: 
空格 ( ) 
Tab ( ) 
Enter ( ) 
換行 ( )


#

以上是XML特殊字元與空格 換行 轉義符的程式碼詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!