我一直在寻找 .Net 中的通用方法来编码用于 Xml 元素或属性的字符串,但当我没有立即找到时感到很惊讶。那么,在我走得太远之前,我会不会错过内置功能?
假设它真的不存在,我正在整理我自己的通用EncodeForXml(string data)
方法,并且我正在考虑最好的方法来做到这一点。
我正在使用的提示整个事情的数据可能包含像 &、<、" 等坏字符。它有时还可能包含正确转义的实体:&、< 和 ",这意味着只使用CDATA 部分可能不是最好的主意。这似乎有点笨拙;我宁愿最终得到一个可以直接在 xml 中使用的漂亮字符串值。
我过去曾使用正则表达式来捕获错误的&符号,我正在考虑在这种情况下以及第一步中使用它来捕获它们,然后对其他字符进行简单的替换。
那么,这是否可以在不使其过于复杂的情况下进一步优化,还有什么我遗漏的吗?:
Function EncodeForXml(ByVal data As String) As String
Static badAmpersand As new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)")
data = badAmpersand.Replace(data, "&")
return data.Replace("<", "<").Replace("""", """).Replace(">", "gt;")
End Function
对不起所有 C# 的人——我真的不在乎我使用哪种语言,但我想让 Regex 成为静态的,你不能在 C# 中做到这一点而不在方法之外声明它,所以这将是 VB 。网
最后,我们仍然在我工作的 .Net 2.0 上,但如果有人可以将最终产品转化为字符串类的扩展方法,那也很酷。
更新前几个响应表明.Net 确实有内置的方法来做到这一点。但是现在我已经开始了,我有点想完成我的 EncodeForXml() 方法只是为了好玩,所以我仍在寻找改进的想法。值得注意的是:应该编码为实体的更完整的字符列表(可能存储在列表/映射中),并且比对串行不可变字符串执行 .Replace() 获得更好的性能。