8

我有一个 XML 节点,其值为空格。例子:

<sampleNode> </sampleNode>

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

我该如何克服呢?我需要得到实际的空白,即“”。非常感谢!

4

3 回答 3

12

假设您正在使用 XmlDocument,您应该将PreserveWhiteSpace属性设置为 True。

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

请参阅有关序列化时保留空白的 MSDN 文章

不同的序列化程序处理这种不同的方式,尝试使用XmlTextReader来解决这个问题,根据这个论坛帖子。

于 2009-12-18T08:30:57.607 回答
4

示例类:

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: ! !
        }
    }
于 2009-12-18T08:52:30.043 回答
1

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

<sampleNode><![CDATA[ ]]></sampleNode>
于 2009-12-18T08:30:15.507 回答