在C#中,如何获取白色空间的XML节点值?

我有一个XML节点,其值为空白区域。 例:

  

我正在使用Serializer从XML文档中获取数据以将其存储在对象中。 现在,我面临的问题是:如果XML节点值只包含空格,就像上面的示例节点一样,序列化程序将其解释为string.Empty。

我怎么能克服这个? 我需要获得实际的空白区域,即“”。 谢谢你!

假设您使用的是XmlDocument,则应将PreserveWhiteSpace属性设置为True。

如果使用和XmlReader设置WhitespaceHandling属性WhitespaceHandling.All。

请参阅此 MSDN有关在序列化时保留空白区域的文章。

不同的序列化程序处理这种不同的方式,尝试使用XmlTextReader ,根据这篇论坛post。

样本类:

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

和示例程序:

  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: ! ! } } 

您可以使用CDATA占位符以避免删除空格: