1

次の形式のxmlノードがあります。このノードはユーザー定義タイプに変換する必要があります。つまり、各ノードはMyClassなどのオブジェクトに変換する必要があります。

class MyClass
{
  public string tag1Id {get;set;}
  public int tag3Val {get;set;}
  public string tag3Id {get;set;}
  public int tag5Val {get;set;}
  public string tag5Id {get;set;}
  public DataTime tag7Val {get;set;}

}

  <tag1 id="id1">
     <tag2>
       <tag3 id="id3">10</tag3>
       <tag4>
        <tag5 id="id5">20</tag5>
       </tag4>
     </tag2>
     <tag6>
      <tag7>2010-12-31</tag7>
     </tag6>
    </tag1>

私はlinqを初めて使用しますが、linqを使用して実行できますか。要件は、xmlseralizationを使用しないことです:(このシナリオを簡単に処理できる他のアプローチはありますか?

4

1 に答える 1

0

いいえ、できません。

正確なノード ID/場所から特定のプロパティに移動するためのビジネス ロジックの配管のために、どこかで変換が行われている必要があります。

できることは、ノードを受け取り、それに応じてプロパティを設定するコンストラクターをコーディングすることです。次に、Linq を使用してノードを列挙し、次のような選択を介してクラス要素の新しい射影を作成できます。

     string data = @"
<tags>
  <tag id=""id1""> 
     <tag2> 
       <tag3 id=""id3"">10</tag3> 
       <tag4> 
        <tag5 id=""id5"">20</tag5> 
       </tag4> 
     </tag2> 
     <tag6> 
      <tag7>2010-12-31</tag7> 
     </tag6> 
    </tag> 
</tags>
    ";
var xml = XDocument.Parse(data);

    var classes = xml.Descendants( "tag1" )
                     .Select( nd => new MyClass( nd ) );
于 2012-06-04T17:11:03.560 に答える