我在寻找一种通用的方法.Net对字符串进行编码,以便在Xml元素或属性中使用,当我没有立即找到字符串时,我感到惊讶.所以,在我进一步讨论之前,我是否会错过内置功能?

暂时假设它真的不存在,我正在组合我自己的通用EncodeForXml(string data)方法,并且我在考虑做这件事的最好方法.

我使用的数据可能会包含坏字符,比如&amp&书信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("<", "&lt;").Replace("""", "&quot;").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 .值得注意的是:应该被编码为实体(可能存储在列表/映射中)的更完整的字符列表,以及比执行.在连续的不可变字符串上替换().

推荐答案

系统XML为您处理编码,所以您不需要这样的方法.

.net相关问答推荐

尽管有`disable`注释,但未 suppress Pylint语法错误

从删除项目时重新索引的列表中删除项目的最佳算法是什么?

C#.Net 中的可选返回

无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0

在 .NET 中获取执行 exe 路径的最佳方法是什么?

AutoMapper 的替代品

(C# 7.2)私有保护修饰符的用例是什么?

OpenCV的.Net(dotNet)包装器?

如何在 C# 中将 HTML 转换为文本?

将接收到的对象转换为 List 或 IEnumerable

Convert.ToBoolean 和 Boolean.Parse 不接受 0 和 1

System.Speech.Recognition 和 Microsoft.Speech.Recognition 有什么区别?

.Net 正则表达式:单词字符 \w 是什么?

为什么发布和调试模式下的代码行为不同?

我应该绑定到 ICollectionView 还是 ObservableCollection

绑定到不在列表中的值的可编辑组合框

从流中获取 TextReader?

如何从其十六进制 RGB 字符串创建 System.Drawing.Color?

将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践

多个列表与 IEnumerable.Intersect() 的交集