2009-12-18 2 views
8

J'ai un noeud XML avec une valeur qui est un espace blanc. Exemple:En C#, comment obtenir une valeur de nœud XML qui est un espace blanc?

<sampleNode> </sampleNode> 

J'utilise un sérialiseur pour obtenir les données de document XML pour stocker dans un objet. Maintenant, le problème auquel je suis confronté est le suivant: Si la valeur du nœud XML ne contient rien d'autre qu'un espace blanc, comme le nœud d'exemple ci-dessus, le sérialiseur l'interprète comme une chaîne.Empty.

Comment puis-je surmonter cela? J'ai besoin d'obtenir l'espace blanc réel, c'est-à-dire "". Merci beaucoup!

+0

Merci Oded, Phil et Laurent pour vos réponses rapides et les bonnes réponses. Toutes vos réponses sont vraies - cependant, mon problème n'est toujours pas résolu. Voici ce que j'utilise pour convertir le fichier XML en objet: StreamReader SR = nouveau StreamReader (File.Open (Path, FileMode.Open)); XmlSerializer Serializer = nouveau XmlSerializer (typeof (MyType)); MyType obj = (MyType) Serializer.Deserialize (SR); return obj; Des idées encore? – Boris

Répondre

11

En supposant que vous utilisez XmlDocument, vous devez définir la propriété PreserveWhiteSpace sur True.

Si vous utilisez et XmlReader, définissez la propriété WhitespaceHandling WhitespaceHandling.All.

See this Article MSDN sur la conservation des espaces blancs lors de la sérialisation.

Les différents sérialiseurs gèrent ces différentes manières, essayez d'utiliser le XmlTextReader pour cela, comme pour le forum this.

+0

Malheureusement, même si votre solution est complètement correcte, je ne peux pas l'appliquer dans mon code, car je n'utilise ni XmlDocument ni XmlReader. J'ai ajouté mon code qui convertit le fichier XML en un objet dans le commentaire de publication. – Boris

+0

Eh bien, que savez-vous: J'ai commencé à utiliser XmlReader: D Merci beaucoup pour votre réponse! – Boris

1

Vous pouvez utiliser un espace réservé CDATA afin d'éviter la suppression de l'espace:

<sampleNode><![CDATA[ ]]></sampleNode> 
+0

Même si votre solution peut résoudre mon problème, je donnerai plus de temps aux gens pour essayer de résoudre le problème de XmlSerializer auquel je suis confronté avec une solution plus élégante. Si, cependant, personne ne trouve la meilleure idée, je vais marquer votre réponse comme correcte. – Boris

+0

Avez-vous essayé d'utiliser l'entité " "? Je suis juste à ce sujet. –

4

classe Sample:

using System; 

namespace GeneralTesting 
{ 
    [Serializable] 
    public class SampleNode 
    { 
     public string sampleNode = " "; 
    } 
} 

Et l'exemple de programme:

XmlSerializer xmls = new XmlSerializer(typeof(SampleNode)); 
    SampleNode sn = new SampleNode(); 
    using (FileStream fs = File.Open(@"C:\test.xml", FileMode.Create)) 
    { 
     xmls.Serialize(fs, sn); 
    } 
    using (FileStream fs = File.OpenRead(@"C:\test.xml")) 
    { 
     XmlReaderSettings xmlrs = new XmlReaderSettings(); 
     xmlrs.IgnoreWhitespace = false; 
     using (XmlReader xmlr = XmlReader.Create(fs, xmlrs)) 
     { 
      Console.WriteLine("!{0}!", ((SampleNode) xmls.Deserialize(xmlr)).sampleNode); //output: ! ! 
     } 
    } 
+1

Merci pour votre réponse et un bon exemple sur l'utilisation de XmlReader. – Boris

Questions connexes