0

次のようなxmlファイルがあります。

  <CommissionTypes>
    <Type>CPA</Type>
    <Lender>
      <Seq>001</Seq>
      <PostUrl>http://www.mysite.com</PostUrl>
    </Lender>
  </CommissionTypes>
</Lenders>

次のようなデータを取得しました。

var config = XDocument.Load(xml);

それをクラス コレクションにマップする必要があります。クラスは次のように構成されています。

public class Lender
{
    public string Type { get; set; }
    public int Seq { get; set; }
    public string PostUrl { get; set; }

    public void Lender(string type, int seq, string postUrl)
    {
        Type = type;
        Seq = seq;
        PostUrl = postUrl;
    }
}

私はしばらくの間linqを使ってこれをやろうとしてきましたが、まだ成功していません。私がやりたいのは、タイプ「CPA」またはその他のタイプのすべての貸し手を取得することです。

何かアドバイス?

// * 更新 * //

以下の更新は、私が現在いるところです。「オブジェクト参照がインスタンスに設定されていません」というエラーが表示され、動作しません。

<CommissionTypes>
  <Type type="CPA">
    <Lender>
      <Seq>001</Seq>
      <PostUrl>http://www.mysite.com</PostUrl>
    </Lender>
  </Type>
</CommissionTypes>

    public static List<Lender> GetLenders(string xml)
    {
        var myXml = XDocument.Load(xml);

        var lenders = new List<Lender>();

        lenders = (from type in myXml.Descendants("Type")
               where type.Attribute("type").Value == "CPA"
        ===>   select new Lender(
                "CPA",
                type.Element("Seq").Value.ConvertTo<int>(),
                type.Element("PostUrl").Value)).ToList();

        return lenders;
    }
4

1 に答える 1

1

要素Seqの直接の子ではないため、クエリは正しくありません。Lender

public static List<Lender> GetLenders(string xml)
{
    var myXml = XDocument.Load(xml);

    var lenders = new List<Lender>();

    lenders = (from type in myXml.Descendants("Type")
               where type.Attribute("type").Value == "CPA"
               from lender in type.Elements("Lender")
               select new Lender(
                    "CPA",
                    (int)lender.Element("Seq"),
                    (string)lender.Element("PostUrl"))).ToList();

    return lenders;
}
于 2013-04-10T19:43:14.353 に答える