2010-05-17 5 views
0

Cela peut être un problème très trivial que j'essaie de résoudre, mais je suis sûr qu'il y a une meilleure façon de le faire. Alors, s'il vous plaît, allez-y doucement.Détection rapide de l'espace de noms Xml

J'ai un tas de fichiers XSD qui sont internes à notre application, nous avons environ 20-30 fichiers Xml qui implémentent des jeux de données basés sur ces XSD. Certains fichiers Xml sont petits (< 100Kb), d'autres sont environ 3-4Mb avec quelques-uns étant plus de 10Mb.

J'ai besoin de trouver un moyen de déterminer quel espace de noms ces fichiers Xml sont en mesure de fournir (quelque chose comme) IntelliSense basé sur le XSD. La mise en œuvre de ce n'est pas un problème - un autre développeur a écrit le code pour cela.

Mais je ne suis pas sûr que la meilleure façon (et la plus rapide!) De détecter l'espace de noms est sans l'utilisation de XmlDocument (qui effectue une analyse complète). J'utilise C# 3.5 et les documents apparaissent comme un flux (certains sont des fichiers distants). Tous les fichiers sont * .xml (je peux détecter si c'était une extension) mais malheureusement l'espace de noms Xml est le seul moyen.

À l'heure actuelle, j'ai essayé XmlDocument mais je l'ai trouvé inefficace et lent car les documents plus volumineux sont en attente d'être analysés (même les documents 100Kb). Quelque chose comme ce qui précède est ma signature de méthode - les surcharges incluent une chaîne pour "contenu". Un motif RegEx (compilé) serait-il bon?

Comment Visual Studio gère-t-il si efficacement? Un autre collège m'a dit de trouver un analyseur Xml rapide en C/C++, analyser le contenu et avoir un talon qui rend l'espace de noms plus lent dans .NET, est-ce une bonne idée?

Répondre

2

Vous pouvez utiliser XmlReader qui utilise une méthode "pull" pour lire le XML (similaire à la méthode "push" de SAX, mais un peu plus facile à coder). La chose importante est, il n'attend pas de lire le fichier entier avant de vous renvoyer des choses.

+0

aha! cela semble intéressant, comment détecteriez-vous un espace de noms en utilisant XmlTextReader et se soucierait-il de plusieurs espaces de noms? –

+0

Vous devriez pouvoir accomplir ceci avec la méthode GetNamespacesInScope. – Garett

Questions connexes