У меня есть узел XML со значением, которое является пробелом. Пример:
<sampleNode> </sampleNode>
Я использую Сериализатор, чтобы заставить данные из XML-документа хранить его в объекте. Теперь, проблема, с которой я сталкиваюсь: Если значение узла XML содержит только пробел, как делает демонстрационный узел выше, сериализатор interpretates это как строка. Пустой.
Как я могу преодолеть это? Я должен получить фактический пробел, т.е. "". Огромное спасибо!
Предполагая, что вы используете XmlDocument, вы должны установить для свойства PreserveWhiteSpace значение True.
При использовании и XmlReader установите свойство WhitespaceHandling WhitespaceHandling. Все.
См. эту статью 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>