c# validation de Schéma XML
J'ai un beau fichier XML comme ceci:
<?xml version="1.0" encoding="utf-8" ?>
<Assets Path="C:\Users\r3plica\Google Drive">
<Assetd>
<FileName>Boomerang - Error codes.xlsx</FileName>
<DisplayName>Boomerang - Error codes</DisplayName>
<Description>This is the Boomerang error codes file</Description>
<Tags>
<Tag>Excel</Tag>
<Tag>Boomerang</Tag>
</Tags>
<Categories>
<Category>1</Category>
<Category>4</Category>
</Categories>
</Assetd>
<Asset>
<FileName>Issue Tracker v5.xlsx</FileName>
<Description>This is the issue tracker for Skipstone</Description>
<Tags>
<Tag>Excel</Tag>
<Tag>Skipstone</Tag>
</Tags>
<Categories>
<Category>1</Category>
<Category>4</Category>
</Categories>
</Asset>
</Assets>
et puis j'ai mon schéma que j'ai créé comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="data"
targetNamespace="http://tempuri.org/data.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/data.xsd"
xmlns:mstns="http://tempuri.org/data.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Assets">
<xs:complexType>
<xs:sequence>
<xs:element name="Asset" type="Asset" minOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Asset">
<xs:sequence>
<xs:element name="FileName" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="DisplayName" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Tags" type="Tags" minOccurs="0" maxOccurs="1" />
<xs:element name="Categories" type="Categories" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Tags">
<xs:sequence>
<xs:element name="Tag" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Categories">
<xs:sequence>
<xs:element name="Category" type="xs:int" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Aussi loin que je peux voir en regardant cela, le fichier xml n'est pas valide parce que le premier élément est Assetd et pas Actif, mais si je lance mon code c#:
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("http://tempuri.org/data.xsd", "data.xsd");
XDocument doc = XDocument.Load(openFileDialog1.FileName);
string msg = "";
doc.Validate(schemas, (o, err) =>
{
msg = err.Message;
});
Console.WriteLine(msg == "" ? "Document is valid" : "Document invalid: " + msg);
il me dit que le fichier xml est valide...
Si j'utilise ce code:
//Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("http://tempuri.org/data.xsd", "data.xsd");
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
//Create the XmlReader object.
XmlReader reader = XmlReader.Create(openFileDialog1.FileName, settings);
//Parse the file.
while (reader.Read()) ;
- Je obtenir cette sortie dans la console:
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Assets'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the attribute 'Path'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Assetd'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'FileName'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'DisplayName'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Description'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Tags'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Tag'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Tag'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Categories'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Category'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Category'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Asset'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'FileName'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Description'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Tags'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Tag'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Tag'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Categories'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Category'.
Warning: Matching schema not found. No validation occurred. Could not find schema information for the element 'Category'.
Quelqu'un peut me dire ce que je fais de mal s'il vous plaît? Il est en train de me tuer 🙁
cheers,
/r3plica
"Aussi loin que je peux voir en regardant cela, le fichier xml n'est pas valide parce que le premier élément est Assetd et pas Actif, mais si je lance mon code c#:" je pense que vous savez déjà ce qui est mal.
Je ne pense pas que vous comprenez. Je suis en train de le faire échouer, mais il déclare qu'il est valide.
La deuxième partie ou nœud est valide. Pensez à ce sujet.
Je ne pense pas que vous comprenez. Je suis en train de le faire échouer, mais il déclare qu'il est valide.
La deuxième partie ou nœud est valide. Pensez à ce sujet.
OriginalL'auteur r3plica | 2013-04-01
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour définir l'espace de noms par défaut dans votre xml, comme ceci:
Aussi, il y a un certain nombre d'autres problèmes:
Chemin de l'attribut n'est pas défini dans le schéma, 'Assetd' élément n'est pas défini.
maxOccurs="unbounded" doivent être définis dans le schéma pour xs:element name="Actif"
Dans le cas où si vous ne pouvez pas modifier le xml, vous devez supprimer du schéma cible de xsd:
Et enregistrer schéma comme ceci:
OriginalL'auteur Alexander