0

我得到一串“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

4 回答 4

1

您需要使用 html 字符编码 where "is&quot;

但是由于您的输入是格式错误的 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;
    }
于 2012-07-27T20:28:43.820 回答
0

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

于 2012-07-27T20:25:39.750 回答
0

System.Security.SecurityElement.Escape() 会为您工作吗?如果没有,还有一个 XmlTextWriter。

于 2012-07-27T20:40:12.623 回答
0

如果您只是询问如何转义报价,那就完成了

&quot;

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

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

  • 选项 2)使用正则表达式来修复您的 XML。

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

于 2012-07-27T20:41:33.300 回答