我有一个 XML 节点,其值为空格。例子:
<sampleNode> </sampleNode>
我正在使用序列化器从 XML 文档中获取数据以将其存储在对象中。现在,我面临的问题是:如果 XML 节点值只包含一个空格,就像上面的示例节点一样,序列化程序会将其解释为 string.Empty。
我该如何克服呢?我需要得到实际的空白,即“”。非常感谢!
假设您正在使用 XmlDocument,您应该将PreserveWhiteSpace属性设置为 True。
如果使用和 XmlReader 设置WhitespaceHandling属性 WhitespaceHandling.All。
请参阅有关序列化时保留空白的 MSDN 文章。
不同的序列化程序处理这种不同的方式,尝试使用XmlTextReader来解决这个问题,根据这个论坛帖子。
示例类:
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 占位符以避免删除空间:
<sampleNode><![CDATA[ ]]></sampleNode>