J'ai un problème avec les types dans mon schéma lorsque j'essaie d'utiliser xsd: any element Pendant la validation, j'ai une exception de validation: L'élément 'MerchantAccount' n'est pas déclaré.Schéma avec xsd: any - Erreur de validation XmlReader
L'idée est d'avoir la possibilité de spécifier des propriétés et des valeurs dans l'élément ExtendedProperties. S'il vous plaît aviser ce que je fais mal.
partie du schéma
...
<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>
...
Une partie du fichier xml:
...
<ProcessorInstance name="aaaa">
<Id>37fc527b-2845-43d0-99ca-ac1ff6f0ed86</Id>
<Descriptor>Test</Descriptor>
<ExtendedProperties>
<MerchantAccount>1111</MerchantAccount>
</ExtendedProperties>
</ProcessorInstance>
...
Code de validation:
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;
}
Merci pour votre réponse! J'ai changé la définition à la façon dont vous avez dit mais maintenant j'ai un message d'erreur: 'Impossible de trouver les informations de schéma pour l'élément' MerchantAccount '' – IlliakaillI
Mais! avec processContents = "skip" fonctionne parfaitement, merci de pointer la raison de l'erreur, problème résolu! – IlliakaillI
L'élément "Impossible de trouver les informations de schéma" est-il un avertissement ou une erreur? Je parie que c'est un avertissement. Vous pouvez laisser 'XmlSchemaValidationFlags.ReportValidationWarnings' si vous ne voulez pas les avertissements. Les avertissements sont toujours "impossible à trouver". –