我正在尝试在跨平台应用程序中使用 C# 和 XML 进行一些工作(大多数开发是在 Linux 上的 MonoDevelop 中进行的,但大多数用户最终将使用我在 Visual Studio 中制作的 WinForms 前端)。 Mono 的行为符合我的预期,但 .Net 并非如此,因此我正在寻找选择和替代方案。
模式有各种可选元素,后面跟着一个“xs:any”元素。这在 Mono 中工作得很好,但在 Microsoft 的 .Net 中却不行,因为它提示可选元素的出现在其在架构中的实际定义和“xs:any”之间不明确。从一些阅读来看,这似乎是一个在 W3C 的架构定义的更高版本中解决的问题。显然 Mono 一直保持最新状态,但 Microsoft 落后了。
我可以看到的选项是:
1) 使用 RelaxNG - 不幸的是,从主站点到 C# 实现的链接已断开。它是 Mono 的一部分,但在 MS 的 .Net 上运行时没有太大帮助。我能看到的唯一方法是复制和重建 Mono's version作为我自己的 DLL
2) 使用 Schematron - 我发现它是关于制作向后和向前兼容的 XML 的建议,但它看起来更像是一种格式验证器,而不是一种“标准”模式语言。我不太确定实现在哪里 - 我能找到的只是一个命令行验证器。
3) 确保 MS .Net 实现使用 Mono 也使用的更新模式标准——我什至不知道这是否可能。
4) 坚持丑陋的模式并将“xs:any”放在可选的“扩展”元素中 - 除了官方 .Net 框架不会混淆之外,它没有任何理由嵌套它,但它确实有效。
该代码针对 .Net 2.0,但我的机器上安装了 3.5。我还在使用 Mono 2.4、MonoDevelop 2.2 和 Visual Studio Express 2005。
1-3 中的任何一个都是可能的,还是我只能选择 4?
谢谢。
最佳答案
您可以通过将 XmlSchemaSet.CompilationSettings.EnableUpaCheck
设置为 false 来解决歧义问题。 UPA
代表您引用的 XML 架构标准的唯一粒子属性要求。
关于c# - 我如何在 .Net 中使用其他/更现代的模式验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352615/