为通用Windows平台应用程序编码XML中的特殊字符

时间:2016-08-12 14:21:50

标签: c# xml win-universal-app

推荐的System.Security.SecureElement.Escape()方法似乎不适用于通用Windows平台应用程序。

将字符串(例如Wet Paint & Co)转换为XML安全表单(Wet Paint & Co)的推荐方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您在remarks in the MSDN下查看,则可以找到包含所有字符的表格,这些字符将从double[] Gravity = getGravity(); 转义。最简单的方法是用自己的方法替换这些字符:

SecurityElement.Escape

但这很慢,因为每个public static string Escape(string str){ return str.Replace("&", "&amp;") .Replace(">", "&gt;") .Replace("\"", "&quot;") .Replace("\'", "&apos;") .Replace("<", "&lt;"); } 都会创建一个新的字符串实例。对于大字符串,最好迭代字符串并将字符添加到Replace

StringBuilder

然而,我读到您使用public static string Escape(string str) { var sb = new StringBuilder(); foreach (var chr in str) { switch (chr) { case '&': sb.Append("&amp;"); break; case '<': sb.Append("&lt;"); break; case '>': sb.Append("&gt;"); break; case '"': sb.Append("&quot;"); break; case '\'': sb.Append("&apos;"); break; default: sb.Append(chr); break; } } return sb.ToString(); } 构建XML,因此您可以修改我的StringBuilder方法并将Replace传递给它。因此没有必要创建第二个实例。

但是在大​​多数情况下,没有必要自己编码一个字符串,因为StringBuilder等类会为你做。正如其他人在你的问题的评论中所说,我也认为使用LinQ to XML(XElement,...)或XML序列化来生成XML更容易。

仅为完整性