Je reçois une variable de chaîne avec XML en elle et disposez d'un fichier XSD. Je dois valider le XML dans la chaîne contre le fichier XSD et savoir qu'il y a plus d'une manière (xmldocument, xmlreader, ...?). P>
Après la validation, je dois juste stocker le XML, donc je n'en ai pas besoin dans un xdocument ou xmldocument. P>
Quelle est la voie à suivre si je veux la performance la plus rapide? P>
4 Réponses :
J'irais pour la xmlreader avec xmlreadersettings car il n'est pas nécessaire de charger le XML complet en mémoire. Il sera plus efficace pour les gros fichiers XML. P>
Je pense que le moyen le plus rapide est d'utiliser un XMLReader qui valide le document tel qu'il est lu. Cela vous permet de valider le document en un seul passage: http: // msdn. microsoft.com/en-us/library/hdf992b8.aspx p>
Utilisez un Vous pouvez spécifier manuellement le XSD le Un démarrage (suppose simplement que les déclarations de l'instance XSD dans le document d'entrée) seraient les suivantes: p> xmlreader code> < / a> configuré pour effectuer la validation, la source étant un < Code> Textreader code> .
xmlreader code> est à utiliser si vous ne souhaitez pas compter sur des déclarations du document d'entrée (avec < a href = "http://msdn.microsoft.com/en-us/library/system.xml.xmlreaderSettings.schemas.aspx" rel = "nfollow NOREFERRER">
xmlreadersettings.schemas code> a > Propriété) p>
D'autres ont déjà mentionné la catégorie code> xmlreader code> pour effectuer la validation, et je ne participerai pas à cela.
Votre question ne spécifie pas beaucoup de contexte. Voulez-vous effectuer cette validation à plusieurs reprises pour plusieurs documents XML ou une seule fois? Je lis un scénario où vous validez simplement beaucoup de documents XML (d'un système tiers?) Et de les stocker pour une utilisation future. P>
Ma contribution à la chasse au rendement serait d'utiliser une compilée xmlschemaset code> qui serait le fil sûr, de sorte que plusieurs threads peuvent la réutiliser sans avoir à analyser le document XSD. P>
var xmlSchema = XmlSchema.Read(stream, null);
var xmlSchemaSet = new XmlSchemaSet();
xmlSchemaSet.Add(xmlSchema);
xmlSchemaSet.Compile();
CachedSchemas.Add(name, xmlSchemaSet);
Oui, je valide et stocke beaucoup de document XML à partir d'un système tiers pour une utilisation ultérieure. Le XSD est toujours le même, de sorte que votre indice, la compilation du jeu de schéma est beaucoup appris, merci!
Qu'est-ce que cachedschemas code> dans cet exemple?
Juste une imminente
Pourquoi pensez-vous que xmlschemaseet est le fil sûr? blogs.msdn.com/b/ XMLTeam / Archive / 2009/04/27 / ...
@Richb, cet exemple fonctionne comme je l'ai décrit. Initialisez un XMLSCHEMASET, compilez-le, puis utilisez-le à partir de plusieurs threads. Mais non, il n'y a pas de soutien pour ce que je dis dans une documentation que je peux trouver.
Vous voudrez peut-être examiner dans xmlreadersettings.ignorécomneurs code>,
ignorewhiteespace code> et
ignoréprocessinginstructions code>; Mes tests s'appliquent uniquement aux fichiers XML sans commentaires, mais si le vôtre contient des commentaires lourds, cela pourrait aider (à vérifier)