2016-06-23 23 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で 'System.InvalidOperationException'という型の例外を処理しました – CB4

+0

これを数回試しました。 私が掲載したコードはうまくいくはずです。 "HtmlDecode"の後にはどうなりますか?あなたがデバッガでそれを見たいなら、あなたは有効なXMLを得ますか? オリジナルのXMLファイルを投稿できますか?と完全な例外(内部例外)? –

+0

私のXMLテキストファイルは大きなファイルです。 XMLにはまだエンコードされている部分を除いて、すべてXMLがデコードされています。あなたの質問では、HtmlDecoderの直後にXML文字列に "XMLページを表示できません。 XSLスタイルシートを使用してXML入力を表示できません。エラーを修正してから、 。 ---------------------------------------------- ---------------------------------- この場所に空白は使用できません。リソースのファイルを処理中にエラーが発生しました。 " – CB4

関連する問題