标准字符串到XML合法字符串的最佳方法 - C#

时间:2014-03-05 20:23:48

标签: c# xml linq-to-xml

目前我对XML法律字符串的理解是,所有要求都是您转换任何实例:&,“,',<,> with&”'< > 所以我做了以下解析器:

private static string ToXmlCompliantStr(string uriStr)
{
    string uriXml = uriStr;
    uriXml = uriXml.Replace("&", "&");
    uriXml = uriXml.Replace("\"", """);
    uriXml = uriXml.Replace("'", "'");
    uriXml = uriXml.Replace("<", "&lt;");
    uriXml = uriXml.Replace(">", "&gt;");
    return uriXml;
}

我知道有类似的问题有很好的答案(这就是我能够编写这个函数的方式)我正在写这个问题,问这个代码是否会翻译C#可以抛出的任何字符串并且有XDocument将其解析为整个文档的一部分,没有任何抱怨,因为我发现的所有问题都表明这些是唯一的转义字符,而不是解析它们将导致100%有效的XML字符串。我已经读过反编译的XNode类,试图看看它是如何解析它的。

由于

1 个答案:

答案 0 :(得分:2)

首先,你绝对应该自己这样做。使用XML API - 这样你就可以信任做正确的事情,而不是担心覆盖角落案例等。你通常不应该试图想出一个“转义字符串” - 你应该传递字符串到XElement构造函数(或XAttribute,或者你的情况)。

换句话说,我认为您应该非常努力地设计您的应用程序,这样您就不需要在所有的问题中显示的那种方法。看看你将使用该方法的位置,看看你是否可以创建一个XElement(或其他)。如果您尝试将XML本身视为数据结构而不仅仅是文本,那么您的体验将获得更好的体验。

其次,您需要了解至少在XML 1.0中,无论您使用多少转义,都存在无法在XML中有效表示的Unicode字符。特别是,除了U + 0009(标签),U + 000A(换行)和U + 000D(回车)之外,值U + 0000到U + 001F是不可表示的。此外,如果您的字符串包含无效的UTF-16(例如代理对的不匹配的一半),则无法在XML中正确表示。