我有两个模式,一个具有对象的主要定义,另一个具有非简单类型的定义(例如,字符串,整数,十进制)
名为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文件。
答案 0 :(得分:0)
您的include只会从其他模式中导入与主模式中的类型共享相同名称空间的类型。
如果要从不同的命名空间导入类型,请使用命名空间属性:
<xs:include schemaLocation="Common.xsd" namespace="http://schemas.domain.com" />
schemaLocation属性也是完全可选的。