В C#, как получить значение узла XML, которое является пробелом?

У меня есть узел XML со значением, которое является пробелом. Пример:

<sampleNode> </sampleNode>

Я использую Сериализатор, чтобы заставить данные из XML-документа хранить его в объекте. Теперь, проблема, с которой я сталкиваюсь: Если значение узла XML содержит только пробел, как делает демонстрационный узел выше, сериализатор interpretates это как строка. Пустой.

Как я могу преодолеть это? Я должен получить фактический пробел, т.е. "". Огромное спасибо!

8
задан Boris 18 December 2009 в 08:27
поделиться

3 ответа

Предполагая, что вы используете XmlDocument, вы должны установить для свойства PreserveWhiteSpace значение True.

При использовании и XmlReader установите свойство WhitespaceHandling WhitespaceHandling. Все.

См. эту статью MSDN о сохранении пустого пространства при сериализации.

Различные сериализаторы обрабатывают это по-разному, попробуйте использовать для этого XmlTextReader согласно ] это сообщение на форуме.

12
ответ дан 5 December 2019 в 10:03
поделиться

Пример класса:

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: ! !
        }
    }
4
ответ дан 5 December 2019 в 10:03
поделиться

Вы можете использовать заполнитель CDATA, чтобы избежать удаления пространства:

<sampleNode><![CDATA[ ]]></sampleNode>
1
ответ дан 5 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: