类型'http://schemas.domain.com:Ssn'未声明,或者在使用多个模式时不是简单类型

时间:2012-01-04 16:44:59

标签: c# xml xsd

我有两个模式,一个具有对象的主要定义,另一个具有非简单类型的定义(例如,字符串,整数,十进制)

名为common.xsd

当我验证时,它会添加两个模式,但它找不到包含文件中的类型。

Main.Xsd持有:

<xs:include schemaLocation="Common.xsd"/>

这是验证功能:

XmlReaderSettings settings = new XmlReaderSettings();

                FileStream fileStream = File.OpenRead(xsdFile);
            XmlSchema schema = XmlSchema.Read(File.OpenRead(System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Schemas\\Main.xsd")), OnXsdSyntaxError);
            XmlSchema schema2 = XmlSchema.Read(File.OpenRead(System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Schemas\\Common.xsd")), OnXsdSyntaxError);


                settings.ValidationType = ValidationType.Schema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

                //þurfum að adda common.xsd líka !
                settings.Schemas.Add(schema);
                settings.Schemas.Add(schema2);
                settings.ValidationEventHandler += new ValidationEventHandler(OnXsdSyntaxError);

                using (XmlReader validator = XmlReader.Create(xmlFile, settings))
                {
                    while (validator.Read())
                        isValid = true;
                }

错误是:

未声明类型'http://schemas.domain.com:Ssn',或者不是简单类型。

很明显,没有添加scheme2文件广告,因此找不到此自定义类型的定义。

我非常感谢这方面的帮助,因为我在此验证中被迫使用多个XSD文件。

1 个答案:

答案 0 :(得分:0)

您的include只会从其他模式中导入与主模式中的类型共享相同名称空间的类型。

如果要从不同的命名空间导入类型,请使用命名空间属性:

<xs:include schemaLocation="Common.xsd" namespace="http://schemas.domain.com" />

schemaLocation属性也是完全可选的。