2010-02-17 12 views
8

Je suis en train d'analyser un grand fichier xml. Donc j'utilise un XmlReader en combinaison avec XElement au lieu de XElement.Load().Comment faire pour supprimer whitespace de l'objet XElement créé à partir de XElement.ReadFrom (XmlReader)

J'ai créé comme objet XElement de XmlReader comme illustré ci-dessous et here. Je souhaite enregistrer ce contenu de l'objet XElement dans la base de données sous forme de chaîne sans les espaces. Aucune des trois méthodes ci-dessous ne fonctionne. Juste une note, si je charge le xml en mémoire en utilisant XElement.Load(), le ToString (SaveOptions.DisableFormatting) fonctionne.

<root> <child></child> </root> //xml saved in db with whitespace 
<root><child></child></root> //want to save as this 

XElement.ToString(SaveOptions.DisableFormatting) // 
XElement.ToString(SaveOptions.None) 
XElement.ToString() 

Les XmlReaderSettings que j'utilise pour l'objet XmlReader sont ci-dessous. J'ai essayé IgnoreWhitespace = true/false sans chance, mais je ne peux pas le définir aussi vrai que certains éléments sont ignorés (pour raison de sauter, voir Why does XmlReader skip every other element if there is no whitespace separator?).

XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); 
    xmlReaderSettings.ProhibitDtd = false; 
    //xmlReaderSettings.IgnoreWhitespace = true;//cannot use this setting 

Il fonctionne si je parse l'objet XElement mais défaites tout le but d'utiliser XmlReader comme XElement.Parse() charge le XML en mémoire.

XElement el = XElement.ReadFrom(reader) as XElement; 
XElement.Parse(el.ToString(), LoadOptions.None) 

Comment puis-je supprimer les espaces?

Edit: Voici ce que je devais faire:

  1. Les éléments skipping est dû à deux lectures reader.Read() et XElement.ReadFrom(reader) dans la même itération en sautant ainsi tout autre élément. La réparation de la boucle mentionnée dans le lien ci-dessus résout cela. Le problème n'a rien à voir avec XmlReaderSettings.
  2. xelement.ToString(SaveOptions.DisableFormatting) supprime le joli formatage.
+0

Je pense que XmlReaderSettings.IgnoreWhitespace est le chemin à parcourir. Quels éléments xml sont ignorés lorsque vous utilisez ce paramètre? –

+0

J'ai essayé avec IgnoreWhitespace comme vrai et faux mais j'obtiens toujours des espaces. Je voulais dire, avec IgnoreWhitespace = true, certains nœuds sont ignorés, c'est-à-dire au lieu de récupérer 200 nœuds enfants, je ne récupère que 100 - je n'y ai pas vraiment prêté attention. Avec IgnoreWhitespace = false, je récupère tous les 200 nœuds. Depuis qu'il a travaillé avec XElement.Load(), il a à voir avec XmlReader lors de l'appel XmlReader.Create() et IgnoreWhitespace a été la première chose que j'ai essayé. Vous vous demandez s'il y a un autre paramètre que je dois définir pour le lecteur. – hIpPy

+0

Quelqu'un? Je viens de rencontrer le même problème ... –

Répondre

1

Essayez d'utiliser this example à partir de la classe XMLTextReader. XMLTextReader a une méthode "WhitespaceHandling" que vous pouvez définir sur none. Il serait utile de répondre à cette question, si vous pouviez fournir un fichier XML de test, pour tester, XMLTextReader fonctionne.