2009-12-18 7 views
8

Tengo un nodo XML con un valor que es un espacio en blanco. Ejemplo:En C#, ¿cómo obtener el valor del nodo XML que es un espacio en blanco?

<sampleNode> </sampleNode> 

Estoy utilizando un serializador para obtener los datos del documento XML para almacenarlos en un objeto. Ahora, el problema al que me enfrento es: si el valor del nodo XML no contiene más que un espacio en blanco, como lo hace el nodo de muestra anterior, el serializador lo interpreta como una cadena. Vacío.

¿Cómo puedo superar esto? Necesito obtener el espacio en blanco real, es decir, "". ¡Gracias un montón!

+0

Gracias Oded, Phil y Laurent por sus respuestas rápidas y respuestas correctas. Todas sus respuestas son ciertas, sin embargo, mi problema aún no se ha resuelto. Esto es lo que estoy usando para convertir el archivo XML a un objeto: StreamReader SR = nuevo StreamReader (File.Open (Path, FileMode.Open)); XmlSerializer Serializer = new XmlSerializer (typeof (MyType)); MyType obj = (MyType) Serializer.Deserialize (SR); return obj; ¿Alguna idea todavía? – Boris

Respuesta

11

Suponiendo que está usando XmlDocument, debe establecer la propiedad PreserveWhiteSpace en True.

Si usa y XmlReader establezca la propiedad WhitespaceHandling WhitespaceHandling.All.

Consulte this artículo de MSDN sobre Preservar el espacio en blanco durante la serialización.

Los diferentes serializadores manejan de esta manera diferente, intente utilizar el XmlTextReader para esto, según la publicación del foro this.

+0

Desafortunadamente, aunque su solución es completamente correcta, no puedo aplicarla en mi código, ya que no estoy usando ni XmlDocument ni XmlReader. He agregado mi código que convierte el archivo XML a un objeto en el comentario posterior. – Boris

+0

Bueno, ¿qué sabes tú? Empecé a usar XmlReader: D ¡Muchas gracias por su respuesta! – Boris

1

Se puede utilizar un marcador de posición CDATA con el fin de evitar la eliminación del espacio:

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

Incluso si su solución puede resolver mi problema, le daré más tiempo a las personas para tratar de superar el problema de XmlSerializer que estoy enfrentando con una solución más elegante. Sin embargo, si a nadie se le ocurre la mejor idea, marcaré su respuesta como correcta. – Boris

+0

¿Ha intentado utilizar la entidad " "? Solo pensé sobre eso. –

4

clase de la muestra:

using System; 

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

Y muestra del programa:

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

Gracias por su respuesta y una buena muestra sobre el uso de XmlReader. – Boris

Cuestiones relacionadas