J'ai un fichier XSD et un fichier XML, comment puis-je vérifier si le XML est dans le bon schéma comme le fichier XSD? p>
Je sais qu'il existe une fonction de validation dans la classe P.s. Je travaille à Invisuel Studio 2010. P> xmldocument code>, mais il a besoin d'un gestionnaire d'événements
et tout ce dont j'ai besoin est vrai ou faux. P>
3 Réponses :
Vous pouvez créer une instance XMLReader validant à l'aide de la classe XMLReaderSettings et de la méthode de Création.
bool isXmlValid = ValidateXml(@"D:\Sample.xml", @"D:\SampleSchema.xsd", @"http://www.w3.org/2001/XMLSchema", typeof(note));
Cela ne validera rien puisque aucun validationflags n'est défini. Cela va simplement désérialiser le XML.
Que dois-je entrer en tant que rotintype?
Rootype est le type de l'élément racine du modèle de classe créé à partir du fichier XSD. Par exemple, si vous créez un modèle de classe (à l'aide de l'outil XSD.exe de .NET), le type serait «Produit» (pour l'exemple XSD donné par @steven).
Créez une hiérarchie de classe à l'aide de l'outil XSD de .NET. Par exemple, si le fichier de schéma est à «D: \ testschema.xsd», l'utilisation de l'outil doit être> XSD / C / OUT: D: \ "D: \ TESTSCHEMA.XSD". Ceci est un outil de ligne de commande. Pour plus d'informations: msdn.microsoft.com/ EN-US / Bibliothèque / X6C1KB0S% 28V = vs.100% 29.aspx
Ah? Quelle est la connexion au type? Comment suis-je supposé écrire le type?
Vous pouvez faire quelque chose comme ça.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Product"> <xsd:complexType> <xsd:sequence> <xsd:element name="ProductName" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="ProductID" use="required" type="xsd:int"/> </xsd:complexType> </xsd:element> </xsd:schema>
Comment puis-je le faire sans entrer dans tous les XML à l'appel de la fonction? Et ce que la boucle "tandis que" supposait faire? et comment la fonction utilise le schéma?
Vous pouvez passer un chemin vers la fonction de validate et faire "VAR VERSE = XMLReader.create (chemin, paramètres);" au lieu de 'varecteur var = xmlreader.create (nouveau stringreader (XML), paramètres);'
d'accord. Mais quelle est la boucle "tant que" supposé faire? et comment la fonction utilise le schéma?
La boucle TIM a analysé le document XML et dans le processus valide le XML. Le XML contient une référence au schéma:
une. Quel est le code qui doit écrire dans la boucle tandis que? b. Et si je n'ai pas de référence dans le code au schéma, c'est dans les propriétés. cela fonctionnerait-il?
A: rien, vous pouvez le laisser comme: tandis que (lecteur.read ()); B: lorsque le schéma est situé dans le répertoire d'exécution et il est référencé comme:
Il y a un moyen beaucoup plus facile de le faire:
private void ValidationCallBack(object sender, ValidationEventArgs e) { throw new Exception(); } public bool validate(string sxml) { try { XmlDocument xmld=new XmlDocument (); xmld.LoadXml(sxml); xmld.Schemas.Add(null,@"c:\the file location"); xmld.validate(ValidationCallBack); return true; } catch { return false; } }
Merci, c'est exactement ce dont j'avais besoin aussi!
Incroyablement simple par rapport aux autres solutions, merci!