【问题标题】:In C#, how to get XML node value that is white space?在 C# 中,如何获取空白的 XML 节点值?
【发布时间】:2010-12-27 23:22:18
【问题描述】:

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

<sampleNode> </sampleNode>

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

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

【问题讨论】:

  • 感谢 Oded、Phil 和 Laurent 的快速回复和正确答案。您的所有回复都是真实的 - 但是,我的问题仍未解决。这是我用来将 XML 文件转换为对象的方法: StreamReader SR = new StreamReader(File.Open(Path, FileMode.Open)); XmlSerializer 序列化器 = 新 XmlSerializer(typeof(MyType)); MyType obj = (MyType)Serializer.Deserialize(SR);返回对象;还有什么想法吗?

标签: c# xml xmlnode


【解决方案1】:

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

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

【讨论】:

  • 即使您的解决方案可以解决我的问题,我也会给人们更多的时间来尝试通过更优雅的解决方案来克服我面临的 XmlSerializer 问题。但是,如果没有人提出更好的主意,我会将您的答案标记为正确。
  • 您是否尝试过使用“ ”实体 ?我只是考虑一下。
【解决方案2】:

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

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

请参阅this MSDN 文章,了解在序列化时保留空白。

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

【讨论】:

  • 不幸的是,即使您的解决方案完全正确,我也无法在我的代码中应用它,因为我既没有使用 XmlDocument 也没有使用 XmlReader。我在帖子评论中添加了将 XML 文件转换为对象的代码。
  • 嗯,你知道什么:我开始使用 XmlReader :D 非常感谢你的回答!
【解决方案3】:

示例类:

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

【讨论】:

  • 感谢您的回答和 XmlReader 用法的一个很好的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2021-05-14
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多