gpt4 book ai didi

c# - XElement 的 XML 架构验证

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:05 25 4
gpt4 key购买 nike

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

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

从 MSDN 页面,XElement.Validate()扩展方法似乎适用于重新验证较大文件的子元素。 XmlSchemaObject 参数导致了我的问题,因为我不能假设它会出现在任何 XElements 中。我想我可以通过从我的 XmlSchemaSet 中获取 XmlSchemaElement 作为 XmlSchemaObject 参数来解决这个问题,但是由于 XmlSchemaSet 已经定义了一切,必须这样做似乎很奇怪。

是否有更好的选择来验证带有架构的 XElement 而无需首先验证整个 XDocument

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

最佳答案

我了解您所提供的 API 存在的问题,据我所知,您有两种选择,一种是将您的 XElement 放入 XDocument 中,例如XDocument doc = new XDocument(xElementToValidate); 然后调用 the Validate method on that XDocument您需要传入的是 XmlSchemaSet,第二个选项是您概述自己的方式,即使用 XElementValidate 方法>,确保您传入 XmlSchemaSet 并且该架构中的根元素定义设置为 XmlSchemaObject。如果这些是只有一个顶级元素定义的简单模式,您所要做的就是例如

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

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

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

关于c# - XElement 的 XML 架构验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com