繁体   English   中英

XElement的XML模式验证

[英]XML Schema Validation of XElement

我正在使用多个XElement对象为我的库中的多个对象提供一些用户指定的数据。 我试图避免指定整个XML文件的结构,因为只要所需的特定元素正确构造,库就不应该关心整个XML的样子。

为此,我有3个单独的XSD文件,为我的类需要的3个XElements每一个定义模式,但是我遇到了一些针对模式验证XElement的问题。 没有解决方法似乎没有办法做到这一点。

在MSDN页面中, XElement.Validate()扩展方法似乎适合重新验证较大文件的子元素。 XmlSchemaObject参数导致我的问题,因为我不能认为它将出现在任何XElements 我想我可以通过抓住解决此问题XmlSchemaElement从我XmlSchemaSet传递作为XmlSchemaObject的说法,但由于XmlSchemaSet已经定义了一切,这似乎很奇怪有这样做。

在没有首先验证整个XDocument情况下,是否有更好的选项来验证带有模式的XElement

或者我应该让业务层处理应用程序中的模式验证,并让库假设XElement正确形成(我考虑了这个选项,但作为个人偏好更喜欢避免抛出异常而宁愿让调用方法知道通过返回参数, XElement无效)。

我理解你提供的API存在的问题,据我所知,你有两个选择,一个是将你的XElement放入一个XDocument ,例如XDocument doc = new XDocument(xElementToValidate); 然后在该XDocument调用Validate方法,其中所有必须传入的是XmlSchemaSet ,第二个选项是您自己概述的方式,即使用XElementValidate方法,确保传入XmlSchemaSet和该架构中的根元素定义设置为XmlSchemaObject 如果这些是只有一个顶级元素定义的简单模式,那么您只需要做一些事情

    XmlSchemaSet schemaSet = new XmlSchemaSet();
    schemaSet.Add(null, "schema.xsd");
    schemaSet.Compile();

    XmlSchemaObject schemaObject = schemaSet.GlobalElements.Values.OfType<XmlSchemaObject>().First();

如果将两种方法中的一种方法包装到一个方法中,那么它应该比调用.NET框架可能提供的类似方便方法更省力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM