0

次の構造の XML ドキュメントがあります。

<dipOrders>
    <interchangeInfo senderEdiCode="LSC58" senderEdiCodeQal="ZZ" receiverEdiCode="15274" receiverEdiCodeQal="ZZ" syntax="X12" syntaxId="X" syntaxVersion="003010"/>
    <order orderNumber="219299" orderDate="2012-12-05T00:00:00" validityDate="2012-12-05T00:00:00">
        <buyer name="LEAR MTO">
            <partyCode buyerCode="811567924"/>
        </buyer>
        <supplier name="BRIDGE OF WEIR LEATHER CO">
            <partyCode buyerCode="749630"/>
        </supplier>
        <orderConsignee name="LEAR MEXICAN SEATING CORP">
            <partyCode buyerCode="LSC59"/>
            <orderLine description="LEA DC 378 HERO 6RSB 5B8" orderNumber="246767" engineeringChangeNumber="N">
                <partyCode buyerCode="DC378105H6RSB5B8AA"/>
                <cumulativeQuantity date="2012-12-04T00:00:00" quantity="0"/>
                <orderQuantity quantity="0" commitmentLevel="Firm" timingQualifier="Weekly" shipDate="2012-12-05T00:00:00"/>
            </orderLine>
            <orderLine description="LEA DC 378 HERO 6RSB 5V0" orderNumber="246767" engineeringChangeNumber="N">
                <partyCode buyerCode="DC378105H6RSB5V0AA"/>
                <cumulativeQuantity date="2012-12-04T00:00:00" quantity="0"/>
                <orderQuantity quantity="0" commitmentLevel="Firm" timingQualifier="Weekly" shipDate="2012-12-05T00:00:00"/>
                <orderQuantity quantity="600" commitmentLevel="Firm" timingQualifier="Weekly" shipDate="2012-12-06T00:00:00"/>
            </orderLine>

これは、orderLine アイテムの属性にアクセスする方法です。

List<int> orderNumbers = doc.Descendants("orderLine").Select(x => int)x.Attribute("orderNumber")).ToList();
List<string> descriptions = doc.Descendants("orderLine").Select(x => (string)x.Attribute("description")).ToList();
List<string> buyerCodes = doc.Descendants("orderLine").Select(x => (string)x.Element("partyCode").Attribute("buyerCode")).ToList(); 

ただし、orderLine は異なる数の orderQuantity ノードを持つことができます。orderLine と orderQuantity の間の適切な関係を取得するには、Linq ステートメントでどのように対処すればよいでしょうか?

4

2 に答える 2

0

SelectMany次の例のように使用してみてください

var r = doc.Descendants("orderLine")
           .SelectMany(node => node.Elements("orderQuantity")
                                   .Select(el => new {OrderNumber = (int)node.Attribute("orderNumber"), Quantity = (int)el.Attribute("quantity")}));

これで、次のような注文番号と対応する数量を示す匿名オブジェクトのシーケンスができました。

246767 0 
246767 600 
于 2013-01-16T11:21:57.107 に答える
0

これを使用して orderQuantity 要素を取得できます

var data = doc.Descendants("orderLine").
               Descendants("orderQuantity")
             .Select(x =>   new {paernt = x.Parent, x}).ToList();

また、このようにする

var data = doc.Descendants("orderLine").
               Descendants("orderQuantity")
             .Select(x =>   new {OrderNumber= (int) x.Parent.Attribute("orderNumber"), 
                                                                      x}).ToList();
于 2013-01-16T11:21:58.363 に答える