C# 清除/替换元素属性中的无效XML字符
更新:无效字符实际上在属性中而不是元素中,这将阻止我使用下面建议的CDATA解决方案。 在我的应用程序中,我接收以下XML作为字符串。这有两个问题,为什么它不能被接受为有效的XML。 希望任何人都有一个优雅地修复这些错误的解决方案C# 清除/替换元素属性中的无效XML字符,c#,xml,regex,C#,Xml,Regex,更新:无效字符实际上在属性中而不是元素中,这将阻止我使用下面建议的CDATA解决方案。 在我的应用程序中,我接收以下XML作为字符串。这有两个问题,为什么它不能被接受为有效的XML。 希望任何人都有一个优雅地修复这些错误的解决方案 XML中存在不允许的ASCII字符。不仅是示例中显示的那个,我还想用相应的字符替换所有ASCII代码 在“元素中,为了快速修复,您可以将此not XML加载到字符串中,并在您知道通常会包含无效数据的任何XML标记中添加[CDATA][1]标记。例如,如果您只在标记中看
标记中看到坏数据,则可以执行以下操作:
var soCalledXml = ...;
var xml = soCalledXml
.Replace("<description>", "<description><![CDATA[")
.Replace("</description>", "]]></description>");
您可以将该内容包装在CDATA区域中 对于正则表达式,它将是这样的,匹配
"<description>(.*?)</description>"
“(.*)”
并替换为
"<description><![CDATA[$1]]></description>"
“”
输入数据的XML标记在哪里?理想情况下,您应该告诉给您的人,他们首先需要生成格式良好的XML。文字
应该是
。嗨,乔,我犯了一个错误,因为非法的xml字符实际上是属性的一部分,而不是元素。car元素没有子元素,但所有元素都作为属性。这将呈现CDATA解决方案。你还知道什么吗?
using System.Text.RegularExpressions;
var soCalledXml = ...;
var xml = Regex.Replace(soCalledXml, "description=\"[^\"]*\"",
match => match.Value.Replace("<", "<").Replace(">", ">"));
"<description>(.*?)</description>"
"<description><![CDATA[$1]]></description>"