中寻找一个泛型方法。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 # 的人,我很抱歉——我并不在乎我使用哪种语言,但是我想让正则表达式是静态的,你们不能在 C # 中不在方法之外声明它,所以这将是 VB.Net
终于,我们还在一起。我工作的地方是 Net 2.0,但是如果有人能够将最终产品转换成字符串类的扩展方法,那也会非常酷。
最初的几个响应表明。网络确实有内置的方法来实现这一点。但是现在我已经开始了,我想完成我的 EncodeForXml ()方法只是为了好玩,所以我仍然在寻找改进的想法。值得注意的是: 应该编码为实体(可能存储在列表/映射中)的更完整的字符列表,以及比执行。在串行中的不可变字符串上替换()。