XML字符串中的无效字符

时间:2011-05-25 04:21:57

标签: c# asp.net xml

我从第三方收到一个xml字符串。 xml字符串包含无效字符,如&和'。我试图把它放在数据集(ASP.NET)中。它会引发错误。任何人都可以帮忙。

2 个答案:

答案 0 :(得分:3)

告诉/要求第三方提供有效的XML。

互操作性标准在不遵守时并不重要。如果今天他们传递了无效字符,那么明天阻止他们传递不匹配节点的是什么?或根本没有标签?

如果没有标准,那么您可能需要编写无数种方案。

那就是说,你可以:

  • 确保您的代码中没有问题(如果您需要详细信息,请发布代码)。
  • 创建已知查找/替换方案的可配置列表,并预处理输入“XML”字符串。
  • 如果数据完整性不重要(我个人认为总是如此),您可以将数据加载到HTML解析器中,这将更加宽容并允许类似XML DOM的文档访问。

根据OP的评论,这是一个非常非常简单的可配置查找/替换示例。

public string PreProcessXml( string xml )
{
    // this list could be read from a config file

    List<Tuple<string, string>> replacements = new List<Tuple<string, string>>();

    // Important: if there are VALID uses of an ampersand in your document, 
    // this may invalidate them! Perform a more elaborate check using a 
    // regex, or ensure that there are no valid entities already in the document.
    replacements.Add( new Tuple<string, string>( "&", "&amp;" ) );

    replacements.Add( new Tuple<string, string>( "\"", "&quot;" ) );
    replacements.Add( new Tuple<string, string>( "\'", "&apos;" ) );

    foreach( var replacement in replacements )
    {
        xml = xml .Replace( replacement.Item1, replacement.Item2 );
    }

     return xml;
}

答案 1 :(得分:1)

使用xml导出数据的最佳方法是

<![CDATA[Your data goes here.]]>

但是当你使用第三方xml时,请尝试使用这个post来处理xml中的特殊字符。