2009-12-18 1 views
8

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

<sampleNode> </sampleNode> 

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

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

+0

Спасибо Одед, Фил и Лорана для быстрых ответов и правильных ответов. Все ваши ответы верны, однако моя проблема все еще не решена. Вот что я использую для преобразования XML-файла в объект: StreamReader SR = новый StreamReader (File.Open (Path, FileMode.Open)); XmlSerializer Serializer = новый XmlSerializer (typeof (MyType)); MyType obj = (MyType) Serializer.Deserialize (SR); return obj; Любые идеи все еще? – Boris

ответ

11

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

Если вы используете и XmlReader, установите свойство WhitespaceHandling WhitespaceHandling.All.

См. this Статья MSDN о сохранении белого пространства при сериализации.

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

+0

К сожалению, несмотря на то, что ваше решение совершенно правильно, я не могу применить его в своем коде, поскольку я не использую ни XmlDocument, ни XmlReader. Я добавил свой код, который преобразует XML-файл в объект в комментарии к сообщению. – Boris

+0

Ну, что ты знаешь: я начал использовать XmlReader: D Большое спасибо за ваш ответ! – Boris

1

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

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

Даже если ваше решение может решить мою проблему, я буду уделять больше времени людям, чтобы попытаться преодолеть проблему XmlSerializer, с которой я столкнулся с более элегантным решением. Если, однако, никто не приходит к лучшей идее, я буду отмечать ваш ответ как правильный. – Boris

+0

Вы пытались использовать объект « »? Я только об этом. –

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

Благодарим вас за ваш ответ и хороший образец использования XmlReader. – Boris

Смежные вопросы