2016-07-15 8 views
1

XmlReaderを使用しているときにXmlSerializerを使用するときに文字列をトリミングするのに問題があります。 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

IgnoreWhiteSpa ceプロパティは、XMLを読み込み、要素と属性の間の空白を無視するためのものです。要素の値から空白を削除することはありません。詳細はこちらhttps://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.ignorewhitespace(v=vs.110).aspx – Mangist

+0

ありがとうございました。このシナリオで私が何を使うことができるか知っていますか? – Freggar

+0

XMLファイルを読み込んだ後にroot.elements配列をループし、手作業で空白を削除してください。 – 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(); 
} 
関連する問題