C# 评估XML是否发现坏字符?

C# 评估XML是否发现坏字符?,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我的c控制台应用程序中有一些来自远程Java web服务的XML,它通过存储过程写入Microsoft SQL Server XML列。有时XML在某个地方有一个不好的字符,而SQLServer没有提供足够的信息来说明问题的确切位置 我希望在数据库写入之前评估XML,当然我没有XSD 在写入数据库之前,评估XML每个部分的常规一致性的好方法是什么?我正在使用.NET4.0,C 谢谢。您可以尝试清理xml,这可能会有所帮助: 该链接实际上只帮助过滤无效字符,大多数情况下,这是不够的,也没有帮助,但

我的c控制台应用程序中有一些来自远程Java web服务的XML,它通过存储过程写入Microsoft SQL Server XML列。有时XML在某个地方有一个不好的字符,而SQLServer没有提供足够的信息来说明问题的确切位置

我希望在数据库写入之前评估XML,当然我没有XSD

在写入数据库之前,评估XML每个部分的常规一致性的好方法是什么?我正在使用.NET4.0,C


谢谢。

您可以尝试清理xml,这可能会有所帮助:

该链接实际上只帮助过滤无效字符,大多数情况下,这是不够的,也没有帮助,但是为了安全起见,我仍然建议过滤未知字符


我认为要检查标记是否有效,可以使用try-catch。如果try-catch在第1行返回问题,那么问题可能是xml中没有根元素?或者,可能是您对xml文档的编码不正确。它们应该返回不同的错误。

如果可能的话,我建议对在第三方服务中检索到的所有XML数据进行XML模式验证

Xml模式验证将确保Xml文档中的每个元素都对其定义的契约有效


您应该考虑使XML模式验证可选,因为它引入了一个开销,您可能希望在生产环境中避免这种开销。但是在开发和测试环境中,从所有第三方服务获取详细的验证错误信息是非常有益的。

您会得到什么错误?您正在使用参数吗?只需将其加载到xml文档或类似的文件中即可。捕获异常,对数据进行四次方化,等等。当然,假设它在您从web服务上取下时就坏了,而不是在您将它发送到sp时编码混乱。只需使用XmlReader打开文档。创建然后使用XmlReader.Read在每个节点上循环。它真的是一个坏字符吗…或者代码没有设置为读取正确的字符集和坏字符吗是其集合中的有效字符,例如代码在UTF-8场景中读取ASCII???-1:清理垃圾仍然会产生垃圾。您不知道文档作者认为坏字符代表了什么。您不需要删除经过消毒的字符,您可以将它们转换为标签,这些标签被视为注释,或者您可以在找到它们的准确行上找到它们时抛出异常。仅仅因为示例显示了一种过滤方式,并不意味着您必须删除或修改。你可以对这些角色做任何你想做的事情,除了理解他们为什么出现。