2010-11-29 3 views
0

J'essaie de formater des entrées xml afin que je puisse utiliser xmltextreader sans erreurs. J'ai ajouté un en-tête et un pied de page par défaut dans l'événement, je remarque qu'il n'y a pas de balises d'ouverture ou de fermeture. Je supprime les caractères illégaux et vérifie unicode, mais je trouve toujours un problème où une entrée glisse et donne l'erreur: données au niveau de la racine est invalide et quand je vérifie que l'entrée est glissé dans le processus de nettoyage ou a juste un inégalé tag quelque part. Maintenant, j'utiliseNettoyage XML - tags non appariés

Dim stringSplitter() As String = {"</entry>"} 
     ' split the file content based on the closing entry tag 
     sampleResults = _html.Split(stringSplitter, StringSplitOptions.RemoveEmptyEntries) 

pour diviser mon XML en entrées individuelles avant de commencer le processus de nettoyage. Voici mes en-têtes par défaut;

Private defaultheader = "xmlns=""http://www.w3.org/2005/Atom""" 
    Private headerl As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbNewLine & "<entry " & defaultNameSpace & ">" 
    Private footer As String = "</entry>" 

est-il un outil dans le cadre de .net qui peut détecter et le nettoyage des tags inégalés afin que je puisse obtenir ce travail

Répondre

2

Je pense que vous êtes à la recherche dans la mauvaise direction pour une solution :) Je pense que ce dont vous avez besoin est de vérifier le IXmlSerializer.

consultez cet article: Proper way to implement IXmlSerializable?

Mon approche serait de créer un objet d'entrée, faire sérialisable, et le lire via le sérialiseur.

Créez un autre objet sérialisé appelé CleanedEntry et indiquez l'objet d'entrée dans le constructeur.

Si l'entrée ne contient aucune erreur, vous devriez être en mesure de faire ce travail assez facilement. (Bien sûr, cela dépend un peu de la façon dont la source ressemble, et ce que vous voulez faire avec.) Veuillez donner un exemple d'entrée/sortie attendue si ma réponse semble floue, et je vais essayer d'élaborer dessus. (si j'ai le temps;))