2016-06-23 94 views
0

我想從文本文件中獲得以下XML字符串的「U8」節點內的信息(Name和Val)。XML序列化返回null

<Cluster> 
    <String> 
     <Name>SomeNAme</Name> 
     <Val> 
      &lt;Cluster&gt; 
       &lt;Name&gt;SomeNAme&lt;/Name&gt; 
       &lt;NumElts&gt;2&lt;/NumElts&gt; 
       &lt;U8&gt; 
        &lt;Name&gt;SomeNAme&lt;/Name&gt; 
        &lt;Val&gt;11&lt;/Val&gt; 
       &lt;/U8&gt; 
       &lt;U8&gt; 
        &lt;Name&gt;SomeNAme&lt;/Name&gt; 
        &lt;Val&gt;208&lt;/Val&gt; 
       &lt;/U8&gt; 
      &lt;/Cluster&gt; 
     </Val> 
    </String> 
</Cluster> 

我寫了以下內容來獲取屬於U8節點的信息,但輸出返回Null。我做錯了什麼?謝謝

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Serialization; 
using System.IO; 
using System.Xml.Linq; 
using System.Xml; 
namespace testXMLSerializer 
{ 
    class Class4 
    { 
     static void Main(string[] args) 
     { 
      var xml = File.ReadAllText(@"C:\test.xml"); 

      XmlSerializer serializer = new XmlSerializer(typeof(Cluster)); 

      using (var reader = new StringReader(xml)) 
      { 
       var info = (Cluster)serializer.Deserialize(reader); 
      } 

      Console.Read(); 
     } 
    } 

    [XmlRoot("Cluster")] 
    public class Cluster 
    { 
     [XmlElement("String")] 
     public List<Cluster_String> Cluster_String { get; set; } // I'll have many of this items in the actual xml 
    } 

    public class Cluster_String 
    { 
     [XmlElement("Val")] 
     public Val Val { get; set; } 
    } 

    public class Val 
    { 
     [XmlElement("Cluster")] 
     public Cluster_S_V_Cluster Cluster_S_V_Cluster { get; set; } 
    } 

    public class Cluster_S_V_Cluster 
    { 
     [XmlElement("U8")] 
     public List<U8> U8 { get; set; } 
    } 

    public class U8 
    { 
     public string Name { get; set; } 
     public string Val { get; set; } 
    } 
} 

回答

0

問題是內部羣集節點是編碼。 如果你不能有它的第一個地方,文件解碼(保存文件時),只需添加:

xml = System.Net.WebUtility.HtmlDecode(xml); 

後:

var xml = File.ReadAllText(@"C:\test.xml"); 

你的主要應該結束這樣看:

static void Main(string[] args) 
    { 
     var xml = File.ReadAllText(@"test.xml"); 
     xml = System.Net.WebUtility.HtmlDecode(xml); 
     XmlSerializer serializer = new XmlSerializer(typeof(Cluster)); 

     using (var reader = new StringReader(xml)) 
     { 
      var info = (Cluster)serializer.Deserialize(reader); 
     } 

     Console.Read(); 
    } 
+0

我就行了「VAR信息= ...」「無效操作異常」 錯誤是: 一個沒有在System.Xml.dll – CB4

+0

發生處理異常的類型'System.InvalidOperationException'我試了幾次。 我發佈的代碼應該可以工作。 「HtmlDecode」後你會得到什麼?如果你希望在調試器中看到它,你會得到一個有效的XML嗎? 你可以發佈你的原始XML文件嗎?和完整的例外(也是內部例外)? –

+0

我的XML文本文件是一個大文件。除了上面那部分仍然有XML編碼的部分之外,它已經解碼了所有的XML。根據你的問題,在HtmlDecoder之後,XML字符串包含一些像這樣的無效內容「無法顯示XML頁面 無法使用XSL樣式表查看XML輸入。請更正錯誤,然後單擊刷新按鈕,或稍後再試。 。 ---------------------------------------------- ---------------------------------- 此位置不允許使用空格。處理資源'文件 「 – CB4