我收到一串'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="" />"
答案 0 :(得分:1)
您需要使用"
为"
但是,由于您的输入是格式错误的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 += """;
continue;
}
}
result += target[i];
}
return result;
}
答案 1 :(得分:0)
您是否尝试将xml文档的部分包装在CDATA标记中?
答案 2 :(得分:0)
System.Security.SecurityElement.Escape()是否适合您?如果没有,还有一个XmlTextWriter。
答案 3 :(得分:0)
如果您只是在询问如何逃避引用,那就是
"
我不确定您要处理的是什么,但问题的根源在于您收到的数据格式错误。
选项1)除非您清理数据,否则您将很难让大多数解析器加载无效的XML数据。有些人比其他人更宽容。你可能会对HTML Agility Pack
选项3)如果编译解析解决方案不是一个选项,请使用XSLT。只需创建转换,然后添加模板即可解决问题。