0

在 .NET 中进行验证时,我们有一个导致 XMLSchemaException 的 XML。使用 MSXML 验证相同的 XML 很好,不会导致错误。

XML 文档使用底层 FDT 技术所需的 XDR 内联模式,因此我不能使用 DTD 或 W3C 模式,我必须坚持使用旧的和过时的 XDR 验证。

我已将其最小化为以下 SSCCE,因此您可以自己尝试。也可在dotNetFiddle上获得:

using System.IO;
using System.Xml;

namespace XDRInlineReferenceInline
{
    public class Program
    {
        private static string xml =
            @"<Root xmlns:dt=""urn:schemas-microsoft-com:datatypes"" xmlns:s=""urn:schemas-microsoft-com:xml-data"">
  <s:Schema name=""InlineA"">
    <s:AttributeType name=""att"" dt:type=""ui1"" />
  </s:Schema>
  <s:Schema name=""InlineB"" xmlns:a=""x-schema:#InlineA"">
    <s:ElementType name=""Ele"" content=""empty"" model=""closed"">
      <s:attribute type=""a:att"" required=""yes"" />
    </s:ElementType>
  </s:Schema>
  <Ele xmlns=""x-schema:#InlineB"" xmlns:a=""x-schema:#InlineA"" a:att=""1"" />
</Root>";

        public static void Main()
        {
            var textReader = new XmlTextReader(new StringReader(xml));
            var validatingReader = new XmlValidatingReader(textReader) {ValidationType = ValidationType.XDR};
            var xmlDoc = new XmlDocument();
            xmlDoc.Load(validatingReader);
        }
    }
}

这是 .NET 解析器的错误,还是有什么我可以改变以使其工作的?

我曾尝试更改 XML 文档中模式的顺序,但这无济于事。

请不要建议将两种不同的模式合二为一。我已经尝试过了,它有效,但不幸的是它不是一个选择。由于模式名称同时用作命名空间,所有现有产品的 XPath 都需要更改。

4

0 回答 0