簡體   English   中英

如何手動更換 xml 特殊字符?

[英]How to replace xml special chars manually?

我的應用程序生成一個 xml 文件,然后將 xslt 轉換為一個不錯的 html 報告。 但是,我對 \n 有疑問。 有一些 xslt 技術可以做到這一點,但它們非常笨拙且耗時。

所以我的解決方案是做一個 string.replace \n 到

<br />

然后強制 xmlWriter 用 WriteRaw(text) 寫這個。 問題是文本有時包含一些非法字符,例如 >。

我在 .net 中找不到任何實用方法,它只接受一個字符串並將其轉換為一個對 xml 友好的字符串。 我查看了反射器和處理此邏輯的 class 不是公開的。

任何想法(除了編寫我自己的代碼來做到這一點)?

永遠不要使用字符串操作來生成 XML。 這不僅僅是因為它會讓社交能力差的人嘲笑你:它會導致代碼中有你不知道存在的錯誤。

從測試驅動的角度考慮它。 您編寫了一個使用字符串操作來生成 XML 的方法。 好的,現在為它編寫一個測試用例,證明它永遠不會發出格式不正確的 XML。 為了讓測試證明這一點,您必須測試 XML 建議中列出的所有可能場景。 您是否知道 XML 建議足以斷言您的測試可以做到這一點?

不,你沒有。 而且你真的不想這樣做,除非你正在為 XML 代編寫框架。 這就是您使用System.Xml中的類來生成 XML 的原因。 編寫它們的人做了這些工作,所以你不必這樣做。

Tomalak 展示了如何使用 XSLT 執行您嘗試執行的操作。 如果您使用XmlWriter生成 XML,請使用以下模式:

string s = "replace\nnewlines\nwith\nbreaks";
string[] lines = s.Split('\n');
for (int i=0; i<lines.Length; i++)
{
    xw.WriteString(lines[i]);
    if (i<lines.Length - 1)
    {
        xw.WriteElementString("br", "", "");
    }
}

這在適當的地方使用字符串操作 - 在 XML 之外處理字符串數據時 - 而不是在不適合的地方 - 在生成 XML 文本時。

我認為這個問題的解決方案會幫助你:

xslt 僅在一個節點中將\n替換為<br/>

您可以將提供的模板合並到您的轉換過程中,並且您無需弄臟手即可完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM