Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 清除/替换元素属性中的无效XML字符_C#_Xml_Regex - Fatal编程技术网

C# 清除/替换元素属性中的无效XML字符

C# 清除/替换元素属性中的无效XML字符,c#,xml,regex,C#,Xml,Regex,更新:无效字符实际上在属性中而不是元素中,这将阻止我使用下面建议的CDATA解决方案。 在我的应用程序中,我接收以下XML作为字符串。这有两个问题,为什么它不能被接受为有效的XML。 希望任何人都有一个优雅地修复这些错误的解决方案 XML中存在不允许的ASCII字符。不仅是示例中显示的那个,我还想用相应的字符替换所有ASCII代码 在“元素中,为了快速修复,您可以将此not XML加载到字符串中,并在您知道通常会包含无效数据的任何XML标记中添加[CDATA][1]标记。例如,如果您只在标记中看

更新:无效字符实际上在属性中而不是元素中,这将阻止我使用下面建议的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("<", "&lt;").Replace(">", "&gt;"));
    
    "<description>(.*?)</description>" 
    
    "<description><![CDATA[$1]]></description>"