2016-07-15 3 views
1

У меня есть проблемы с обрезкой строк при использовании XmlSerializer при использовании XmlReader. Параметр IgnoreWhitespace не показывает эффекта, и строка элемента по-прежнему содержит \ n и пробелы.C# XmlSerializer обрезка пробелов

Есть ли способ обрезать его «на лету»? я предпочел бы такой метод, так как я десериализации в массив строк

Вот пример XML:

<?xml version='1.0' encoding='UTF-8'?> 
<root> 
    <element> 
    some random string 
    </element> 
    <element> 
    another random string 
    </element> 
</root>" 

А вот пример кода:

class Program 
    { 
     public static void Main(string[] args) 
     { 
      string xml = 
      @"<?xml version='1.0' encoding='UTF-8'?> 
      <root> 
       <element> 
       some random string 
       </element> 
       <element> 
       another random string 
       </element> 
      </root>"; 

      var string_reader = new StringReader(xml); 

      var xml_reader = XmlReader.Create(string_reader, new XmlReaderSettings() 
      { 
       IgnoreWhitespace = true //setting this option doesn't work 
      }); 
      root d = (root)new XmlSerializer(typeof(root)).Deserialize(xml_reader); 
      d.elements[0].Contains("\n"); //true 

      //Dispose string/xml reader 

      Console.Read(); 
     } 
    } 

    public class root 
    { 
     [XmlElement(ElementName ="element")] 
     public string[] elements { set; get; } 
    } 
+1

The IgnoreWhiteSpa ce для чтения XML и игнорирования любого пробела между элементами и атрибутами. Это не позволит обрезать пробелы из ваших значений элементов. Больше информации здесь https://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.ignorewhitespace(v=vs.110).aspx – Mangist

+0

Я вижу, спасибо. Вы знаете, что я могу использовать для этого сценария? – Freggar

+0

Просто пропустите массив root.elements после чтения XML-файла и вручную обрезайте пробел. – Mangist

ответ

3

После чтения в файле XML , вам необходимо вручную обрезать пробелы

root d = (root)new XmlSerializer(typeof(root)).Deserialize(xml_reader); 
for (int i = 0; i < d.elements.Count; i++) 
{ 
    d.elements[i] = d.elements[i].Replace("\n", String.Empty).Trim(); 
} 
Смежные вопросы