У меня проблема с типами в моей схеме при попытке использовать xsd: любой элемент Во время проверки у меня есть исключение проверки: элемент «MerchantAccount» не объявлен.Схема с xsd: any - ошибка проверки XmlReader
Идея состоит в том, чтобы иметь возможность указывать любые свойства и значения в элементе ExtendedProperties. Прошу совета, что я делаю неправильно.
Часть схемы
...
<xsd:complexType name="ExtendedPropertiesType">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ProcessorInstanceType">
<xsd:all>
<xsd:element name="Id" type="xsd:string" />
<xsd:element name="Descriptor" type="xsd:string" />
<xsd:element minOccurs="0" name="ExtendedProperties" type="ExtendedPropertiesType" />
</xsd:all>
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
...
Часть XML-файла:
...
<ProcessorInstance name="aaaa">
<Id>37fc527b-2845-43d0-99ca-ac1ff6f0ed86</Id>
<Descriptor>Test</Descriptor>
<ExtendedProperties>
<MerchantAccount>1111</MerchantAccount>
</ExtendedProperties>
</ProcessorInstance>
...
Код проверки:
private static XmlDocument loadConfigurationXml(FileInfo configFile)
{
//load schema
var sr = new StringReader(Schemas.ConfigurationSchema);
var schema = XmlSchema.Read(sr, (o, ea) => { throw ea.Exception; });
//validate against the schema
var schemas = new XmlSchemaSet();
schemas.Add(schema);
var readerSettings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings,
Schemas = schemas,
};
readerSettings.ValidationEventHandler += (o, ea)=>
{
throw new PaynetValidationException(
string.Format("Invalid configuration file, see schema for details: {0}",
ea.Message),
ea.Exception);
};
var reader = XmlReader.Create(configFile.FullName, readerSettings);
//parse and validate config file
while (reader.Read()){}
var ret = new XmlDocument();
if (configFile.Length != 0)
ret.Load(configFile.FullName);
return ret;
}
Спасибо за ваш ответ! Я изменил определение так, как вы сказали , но теперь у меня появилось сообщение об ошибке: «Не удалось найти информацию о схеме для элемента MerchantAccount» – IlliakaillI
Но! с processContents = "skip" работает отлично, спасибо за указание причины ошибки, проблема решена! – IlliakaillI
«Не удалось найти информацию о схеме» предупреждение или сообщение об ошибке? Держу пари, это предупреждение. Вы можете оставить «XmlSchemaValidationFlags.ReportValidationWarnings», если вы не хотите получать предупреждения. Предупреждения всегда «не могут найти». –