我一直在寻找.Net中的通用方法来编码供Xml元素或属性使用的字符串,当我没有立即找到一个字符串时,我感到很惊讶。因此,在进一步介绍之前,我是否会丢失内置功能?
暂时假设它确实不存在,我正在整理自己的通用EncodeForXml(string data)
方法,并在考虑实现此目的的最佳方法。
我使用的数据提示整个事情可能包含&,<,“等错误字符。它有时还可能包含正确转义的实体:&amp;,&lt;和&quot ;,这意味着仅使用一个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()可以获得更好的性能。