Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,如何获得空白的XML节点值?_C#_Xml_Xmlnode - Fatal编程技术网

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

在C#中,如何获得空白的XML节点值?,c#,xml,xmlnode,C#,Xml,Xmlnode,我有一个XML节点,它的值是一个空白。例如: <sampleNode> </sampleNode> 我使用序列化程序从XML文档中获取数据,并将其存储在对象中。现在,我面临的问题是:如果XML节点值只包含一个空格,就像上面的示例节点一样,序列化程序将其解释为string.Empty 我怎样才能克服这个问题?我需要得到实际的空白,即“”。非常感谢 您可以使用CDATA占位符以避免删除空间: <sampleNode><![CDATA[ ]]>&l

我有一个XML节点,它的值是一个空白。例如:

<sampleNode> </sampleNode>

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


我怎样才能克服这个问题?我需要得到实际的空白,即“”。非常感谢

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

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

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

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

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

不同的序列化程序以不同的方式处理此问题,请根据论坛帖子尝试使用。示例类:

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

感谢Oded、Phil和Laurent的快速回答和正确答案。你所有的回答都是正确的-但是,我的问题仍然没有解决。下面是我用来将XML文件转换为对象的内容:StreamReader SR=newstreamreader(file.Open(Path,FileMode.Open));XmlSerializer Serializer=新的XmlSerializer(typeof(MyType));MyType obj=(MyType)序列化程序。反序列化(SR);返回obj;还有什么想法吗?不幸的是,尽管您的解决方案完全正确,但我无法将其应用到我的代码中,因为我既不使用XmlDocument也不使用XmlReader。我在帖子中添加了将XML文件转换为对象的代码。好吧,你知道什么:我开始使用XmlReader:D非常感谢你的回答!即使您的解决方案可以解决我的问题,我也会给人们更多的时间来尝试用一个更优雅的解决方案来解决我面临的XmlSerializer问题。但是,如果没有人想出更好的主意,我会将您的答案标记为正确。您是否尝试使用“”实体?我只是想了想。谢谢你的回答和一个关于XmlReader用法的好例子。