2009-04-28 53 views
0

在我的项目中,我有非常大的XSD文件,我用它来验证一些XML请求和对第三方的响应。xsd验证againts xsd生成的类级别验证

对于上述方案,我可以有两种方式

1)创建XML,然后验证对给定XSD 2)从XSD与XSD根工具的帮助下创建类,添加attirbutes的XTRA位,并利用它们进行验证。

验证在所述第二方式将在本方式有些工作, 一个)转换XML请求/响应与XML序列 b)中验证在每个属性,即,设置的自定义属性的对象对象传递的对象的方法它将通过遍历属性及其在每个属性上设置的自定义属性来验证对象,并且如果对象验证并且确定xml请求是否有效,这将返回布尔值?

现在关注哪种方法在性能和其他方面都很好?

回答

0

我不确定将您的XML反序列化为对象是否会给您提供您需要的验证。

以XSD为例,它定义了一个字符串字段,然后约束可以出现在该字段中以匹配某个正则表达式的文本。你的生成的类会遵守这个约束吗?有这样的一些微妙的问题,可能会让你处于你接受无效的XML或拒绝其他有效的XML的情况。

如果你的第三方给了你一个XSD来验证,那么最好你坚持这个合同的定义而不是找到捷径。

然而,您可能会发现有很常见的错误和错误,您可以快速过滤掉。这一切都取决于您的信噪比,但您可能会考虑创建一个简单的XSD或程序测试,然后再投入时间运行完整的XSD,然后可以“快速失败”。但是,如果您遇到很多故障并且使用XSD进行完全验证的成本很高,这样做才有意义。

此外,请确保您为您的方案使用最快的XSD验证。你没有说过,如果这是一个.NET环境,但是如果它是XmlDocument,XmlValidatingReader和XElement作为读取XML和根据方案验证它的三种方式。根据你从哪里得到XML,以后你在做什么,你应该评估哪些机制为你提供了最好的性能。

1

如果您的主要担心是性能您应该使用XmlReader并附上XSD架构进行验证。这里是一个例子:

// Store a reference to this object 
// to reuse the compiled XSD schema 
// for multiple parsing operations 
XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd"); 
settings.ValidationType = ValidationType.Schema; 

using (XmlReader reader = XmlReader.Create("books.xml", settings)) 
{ 
    while (reader.Read()) 
    { 
     // Do parsing logic 
    } 
}