xsd架构无效?

时间:2010-01-23 17:57:55

标签: c# .net xsd

我已经从http://www.w3.org/2001/XMLSchema.xsd下载了官方的“xsd架构”。

我在本地保存并尝试使用此代码进行验证:

var sc = XmlSchema.Read(new FileStream(@"c:\temp\xsd.xsd", FileMode.Open), validate);
sc.Compile(validate);

它失败了,因为它无法找到某些DTD。

问题1 :为什么xsd的架构包含xml验证器无法处理的定义?

我从文件顶部删除了DTD定义,我得到了这个(以及更多)验证错误:

"Restriction of 'anySimpleType' is not allowed."

问题2 :为什么编译xsd的架构会失败?

我使用set.Add(...)和工作尝试使用XmlSchemaSet。

问题3 :验证XmlSchema和XmlSchemaSet有什么区别?

然后我创建了一个从磁盘导入xsd架构的虚拟架构:

<s:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="c:\temp\xsd.xsd" />

当我将此架构添加到架构集时,它会再次失败并出现与上述相同的错误。

问题4 :为什么与直接添加xsd架构(有效)有什么不同?

1 个答案:

答案 0 :(得分:0)

您需要使用架构引用的其他几个文件:

XmlSchema.dtddatatypes.dtd。下载后,您可以验证:

class Program
{
    static void Main()
    {
        var settings = new XmlReaderSettings();
        settings.ProhibitDtd = false;
        using (var reader = XmlReader.Create("XMLSchema.xsd", settings))
        {
            settings.Schemas.Add(XmlSchema.Read(reader, null));
        }

        using (var reader = XmlReader.Create("xsd.xsd", settings))
        {
            // This will throw if the XML file is not valid
            while (reader.Read()) ;
        }
    }
}