这是一个问题而不是技术问题,需要就验证XML的最佳方法提出建议。
我有一个用C#编写的Web服务,它接受传入的Xml请求。
目前我正在针对我的XSD架构验证传入的Xml。这很好用,我可以捕获任何错误并用适当的消息做出回应。
另外,我有以下函数可以传递我的对象,以验证所有属性;
private List<ValidationResult> Validate(object oObject)
{
var results = new List<ValidationResult>();
var context = new ValidationContext(oObject, serviceProvider: null, items: null);
Validator.TryValidateObject(oObject, context, results, false);
return results;
}
我验证了定义的元素;
[Required]
[StringLength(175)]
public string Name{ get; set; }
该函数返回找到的任何错误的字符串列表。
提供XSD架构和类属性在验证要求方面是同步的,似乎我的代码永远不会返回函数中的结果列表
private List<ValidationResult> Validate(object oObject)
因为XSD架构阻止代码到达那一点。
这是执行XML验证的常用方法吗?
答案 0 :(得分:1)
是的,在请求中执行两种类型的验证(XSD和特定于应用程序)是正常的。
XSD是对请求期望的可共享(和可执行)规范。能够根据XSD的共享规范自动通知客户请求问题是一个胜利。
但是,某些检查无法在XSD中表达(方便或完全)。例如,对于XSD 1.0,请参阅XSD 1.1 xs:assertion
的所有动机示例。即使对于XSD 1.1,也可能需要或优先在XSD上对带外请求进行检查。例如,在以某种方式实现服务时可能需要执行级别检查,但服务接口不需要永久地负担检查。或者可能会使用一些复杂的,现存的程序代码来检查请求的某些方面,并且在XSD中以声明方式表达可能是不可能的或不实用的。
在XSD中尽可能多地放置验证限制,但也保留那些自然不适合的检查 - 第二级验证可能是有价值且实用的。