我在寻找一种通用的方法.Net对字符串进行编码,以便在Xml元素或属性中使用,当我没有立即找到字符串时,我感到惊讶.所以,在我进一步讨论之前,我是否会错过内置功能?
暂时假设它真的不存在,我正在组合我自己的通用EncodeForXml(string data)
方法,并且我在考虑做这件事的最好方法.
我使用的数据可能会包含坏字符,比如&&书信telegram ;,",等等.它有时还可能包含正确转义的实体:"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
Sorry for all you C# -only folks-- I don't really care which language I use, but I wanted to make the Regex static and you can't do that in C# without declaring it outside the method, so this will be VB.Net个
最后,我们还在继续.Net 2.0,但如果有人能将最终产品转化为string类的扩展方法,那也很酷.
Update最初的几个回答表明了这一点.Net确实有内置的方法来实现这一点.但现在我已经开始了,我想完成我的EncodeForXml()方法只是为了好玩,所以我仍然在寻找改进的 idea .值得注意的是:应该被编码为实体(可能存储在列表/映射中)的更完整的字符列表,以及比执行.在连续的不可变字符串上替换().