为通用Windows平台应用程序编码XML中的特殊字符
本文关键字:XML 特殊字符 编码 应用程序 Windows 平台 | 更新日期: 2023-09-27 18:02:15
推荐的System.Security.SecureElement.Escape()方法似乎不适用于通用Windows平台应用程序。
将字符串(例如Wet Paint & Co
)转换为xml安全形式(Wet Paint & Co
)的推荐方法是什么?
如果您查看MSDN中的备注,您可以找到一个包含所有字符的表,这些字符将从SecurityElement.Escape
中转义。最简单的方法是在您自己的方法中替换这些字符:
public static string Escape(string str){
return str.Replace("&", "&")
.Replace(">", ">")
.Replace("'"", """)
.Replace("''", "'")
.Replace("<", "<");
}
但是这是相当慢的,因为每个Replace
将创建一个新的字符串实例。对于大字符串,最好是遍历字符串并将字符添加到StringBuilder
中。
public static string Escape(string str)
{
var sb = new StringBuilder();
foreach (var chr in str)
{
switch (chr)
{
case '&':
sb.Append("&");
break;
case '<':
sb.Append("<");
break;
case '>':
sb.Append(">");
break;
case '"':
sb.Append(""");
break;
case '''':
sb.Append("'");
break;
default:
sb.Append(chr);
break;
}
}
return sb.ToString();
}
然而,我读到你用StringBuilder
构建你的XML,所以你可以修改我的Replace
方法并将你的StringBuilder
传递给它。因此不需要创建第二个实例。
但是在大多数情况下,没有必要自己编码字符串,因为像XElement
等类会为你做。正如其他人在你的问题的评论中所说,我认为也更容易使用LinQ to XML (XElement
,…)或XML序列化来生成XML。
只是为了完整