如何在原始字符串中转义xml内容?

时间:2012-07-27 20:22:02

标签: c# xml

我收到一串'xml',其中包含一些未转义的内容。这是一个简单的例子:

<link text="This is some text with "potentially" some quoted text in it." linktype="external" anchor="" target="" />

我遇到的问题是,当您尝试使用XmlDocument.LoadXml()将上述内容转换为字符串时,LoadXml()会抛出异常,因为属性所包含的内容的内部引号没有转义文本'。是否有一种相对无痛的方式来具体逃避内容?或者我只是要解析它/逃避它/自己重建它?

我没有生成这个文本,我只是从另一个进程中得到它,如下所示:

"<link text="This is some text with "potentially" some quoted text in it." linktype="external" anchor="" target="" />"

4 个答案:

答案 0 :(得分:1)

您需要使用"&quot;

的html字符编码

但是,由于您的输入是格式错误的xml文本,因此您必须找到一种方法来解析该文本并将其替换为带编码的翻译。也许一些正则表达式解析..

请认为这只是一种创造性的工作方式。我知道它很脏,但在大多数情况下都可以使用:

 private static string XmlEncodeQuotes(string target) {

        string result = string.Empty;
        for (int i = 0; i < target.Length; i++)
        {
            if (target[i] == '"')
            {
                if (target[i - 1] != '=')
                    if (!Regex.IsMatch(target.Substring(i), @"^""\s[a-zA-Z]+="""))
                    {
                        result += "&quot;";
                        continue;
                    }
            }
            result += target[i];
        }
        return result;
    }

答案 1 :(得分:0)

您是否尝试将xml文档的部分包装在CDATA标记中?

答案 2 :(得分:0)

System.Security.SecurityElement.Escape()是否适合您?如果没有,还有一个XmlTextWriter。

答案 3 :(得分:0)

如果您只是在询问如何逃避引用,那就是

&quot;

我不确定您要处理的是什么,但问题的根源在于您收到的数据格式错误。

  • 选项1)除非您清理数据,否则您将很难让大多数解析器加载无效的XML数据。有些人比其他人更宽容。你可能会对HTML Agility Pack

  • 感到幸运
  • 选项2)Use Regular Expressions to fix your XML.

  • 选项3)如果编译解析解决方案不是一个选项,请使用XSLT。只需创建转换,然后添加模板即可解决问题。