什么是验证XML的最佳方法?

时间:2010-01-23 23:01:02

标签: c# .net xml-serialization

我一直在寻找C#的XML序列化,看起来很有趣。我正在阅读本教程

http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization

当然你可以将它序列化回一个对象列表。所以我想知道最好将它序列化回一个对象列表,然后遍历每个对象并验证它或者使用一个模式验证它,然后对它进行反序列化并用它做一些事情吗?

http://support.microsoft.com/kb/307379

由于

4 个答案:

答案 0 :(得分:1)

我想这取决于你想要验证什么,以及用于什么目的。如果它是为了与其他系统互操作,那么通过xsd进行验证是一个合理的想法,不仅仅是因为你可以使用xsd.exe从xsd为你编写类(你也可以从xml或dll生成xsd,但是它不那么准确)。同样,您可以使用XmlReader(已正确配置)来检查xsd,

如果您只想要有效的.NET对象,我很想将序列化表单作为实现细节,并编写一些C#验证代码 - 可能实现IDataErrorInfo,或使用数据注释。

答案 1 :(得分:0)

您可以创建一个XmlValidatingReader并将其传递给序列化程序。这样,您可以一次读取文件并同时验证它。

我相信即使您使用手动滚动的XML类(对于非常大的XML文件),相同的技术也会起作用,因此您可能会发现值得一看。

编辑:

很抱歉只是重读了我的一些代码,XmlValidatingReader已经过时,你可以用XmlReader做你需要的。

请参阅XmlReader Settings

答案 2 :(得分:0)

为了速度,我会在C#中进行,但是为了完整性,您可能希望使用XSD来完成。问题在于你必须学习冗长而繁琐的XSD语法,这些语法经验需要大量的试验和错误,耗时并且不会给序列化带来很多奖励。特别是对于必须在C#和XSD中映射它们的常量。

您将始终将XML编写为C#。读回来时任何未知的东西都会被忽略。如果您不使用文本编辑器编辑XML,则可以保证它将以正确的方式返回,在这种情况下,绝对不需要XSD。

答案 3 :(得分:0)

如果验证XML,则只能证明它在结构上是正确的。尝试从XML反序列化将告诉您同样的事情。

通常,业务对象可以实现超出有效模式的业务逻辑/规则/条件。这种类型的知识应该与业务对象本身保持一致,而不是在某种外部验证例程中重复(否则,如果您更改业务规则,则必须同时更新验证程序)。