2009-12-18 8 views
8

Mam węzeł XML z wartością, która jest biała spacja. Przykład:W języku C#, jak uzyskać wartość węzła XML, która jest biała przestrzeń?

<sampleNode> </sampleNode> 

Używam Serializera, aby uzyskać dane z dokumentu XML do przechowywania go w obiekcie. Teraz problem, przed którym stoję, to: Jeśli wartość węzła XML zawiera tylko białą przestrzeń, podobnie jak przykładowy węzeł powyżej, serializer interpretuje go jako ciąg.Empty.

Jak mogę to przezwyciężyć? Potrzebuję uzyskać rzeczywistą białą przestrzeń, tj. "". Wielkie dzięki!

+0

Dziękuję Oded, Phil i Laurent za szybkie odpowiedzi i prawidłowych odpowiedzi. Wszystkie twoje odpowiedzi są prawdziwe - jednak mój problem nie został rozwiązany. Oto, czego używam do konwersji pliku XML na obiekt: StreamReader SR = nowy StreamReader (File.Open (Path, FileMode.Open)); XmlSerializer Serializer = nowy XmlSerializer (typeof (MyType)); MyType obj = (MyType) Serializer.Deserialize (SR); return obj; Masz jakieś pomysły? – Boris

Odpowiedz

11

Zakładając, że używasz XmlDocument, należy ustawić właściwość PreserveWhiteSpace True.

Jeśli używasz i XmlReader ustaw właściwość WhitespaceHandling WhitespaceHandling.All.

Zobacz artykuł MSDN o konserwacji białej przestrzeni podczas szeregowania.

Różne serializery obsługują te różne sposoby, spróbuj użyć do tego celu XmlTextReader, zgodnie z postem na forum this.

+0

Niestety, mimo że twoje rozwiązanie jest całkowicie poprawne, nie mogę go zastosować w moim kodzie, ponieważ nie używam ani XmlDocument ani XmlReader. Dodałem mój kod, który konwertuje plik XML do obiektu w komentarzu do posta. – Boris

+0

Cóż, co wiesz: zacząłem używać XmlReader: D Dziękuję bardzo za odpowiedź! – Boris

1

Można użyć zastępczy CDATA, aby uniknąć usunięcia przestrzeni:

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

Nawet jeśli twoje rozwiązanie może rozwiązać mój problem, dam więcej czasu ludziom, którzy spróbują przezwyciężyć problem XmlSerializer, przed którym stoję, z bardziej eleganckim rozwiązaniem. Jeśli jednak nikt nie wymyśli lepszego pomysłu, zaznaczę twoją odpowiedź jako poprawną. – Boris

+0

Czy próbowałeś użyć encji " "? Po prostu o tym. –

4

klasa Próbka:

using System; 

namespace GeneralTesting 
{ 
    [Serializable] 
    public class SampleNode 
    { 
     public string sampleNode = " "; 
    } 
} 

i próbki Program:

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

Dziękuję za odpowiedź i miłą próbkę na użycie XmlReader. – Boris

Powiązane problemy