-1

辞書を作成する単純なlinqクエリが必要です。いくつかの製品を購入できる顧客のリストを含むXmlがあります。すべての顧客に対して、1つの製品のみを無料で提供できます。以下は、次のようなクラスを作成したサンプルXmlです。

Public Class CustomerFreeItem
{
  public string CustomerID
  public string FreeproductName
  public string ActualPrice
}

<customers>
  <customer id="1">
    <product name="book" free="false" actualPrice="10"/>
    <product name="pen" free="true" actualPrice="10"/>
    <product name="scale" free="false" actualPrice="10"/>
  </customer>
  <customer id="2">
    <product name="book" free="true" actualPrice="10"/>
    <product name="pen" free="false" actualPrice="10"/>
    <product name="scale" free="false" actualPrice="10"/>
  </customer>
  <customer id="3">
    <product name="book" free="false" actualPrice="10"/>
    <product name="pen" free="false" actualPrice="10"/>
    <product name="scale" free="true" actualPrice="10"/>
  </customer>
</customers>

Frome above Xmlキーとして顧客ID、FreeProductとして値を持つ辞書が必要です(CustomerFreeItemオブジェクト)

提案してください

ありがとう、サーモン。

4

2 に答える 2

2

したがって、使用している言語が明確ではありません (クラス宣言は C# と VB の両方で無効です) ここに C# の魂があります

XDocument xdoc = XDocument.Load(path_to_xml_file);
var query = from c in xdoc.Descendants("customer")
            let freeProduct = c.Elements("product")
                                .Where(p => (bool)p.Attribute("free"))
                                .Single()                        
            select new CustomerFreeItem()
            {
                CustomerID = (int)c.Attribute("id"),
                FreeproductName = (string)freeProduct.Attribute("name"),
                ActualPrice = (int)freeProduct.Attribute("actualPrice")
            };

Dictionary<int, CustomerFreeItem> dictionary =  
     query.ToDictionary(x => x.CustomerID);

次のクラス宣言を使用しました。

public class CustomerFreeItem
{
    public int CustomerID { get; set; }
    public string FreeproductName { get; set; }
    public int ActualPrice { get; set; }
}

また、すべての顧客が無料の製品を 1 つだけ持っていると仮定しました。

于 2012-11-10T17:59:28.330 に答える
0

レイアウトを使用して辞書を作成し、XmlSerializerを使用すると、必要な形式が表示されます。次に、プロセスを逆にするだけで、辞書がいっぱいになります。

于 2012-11-10T18:00:25.047 に答える