1

サンプルXML:

<PTC_FareBreakdowns>
  <PTC_FareBreakdown>
    <PassengerTypeQuantity Code="ADT" Quantity="1" />
    <FareBasisCodes>
      <FareBasisCode>RGOSAVE</FareBasisCode>
    </FareBasisCodes>
    <PassengerFare>
      <BaseFare Amount="4400" CurrencyCode="INR" />
      <Taxes>
        <Tax Amount="233" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="218" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="3500" CurrencyCode="INR" TaxCode="YQ" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="440" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="173" CurrencyCode="INR" TaxCode="OC" TaxGroupCode="SF" TaxGroupName="Taxes &amp;amp; Fees" />
        <Tax Amount="0" TaxCode="B2BMarkup" />
      </Taxes>
      <TotalFare Amount="8964" CurrencyCode="INR" />
      <Markups>
        <Markup Amount="0.0000" CurrencyCode="INR" Description="0.0  for client - 26472" MarkupCode="DisplayMarkup" Type="M" />
        <Markup Amount="0" CurrencyCode="INR" Description="0.0 % on base fare  for client - " MarkupCode="DisplayMarkup" MarkupType="M" Type="M" />
        <Markup Amount="0" Description="0.0% on fule surcharge  3500.0for client" MarkupCode="DisplayMarkup" MarkupType="M" Type="M" />
      </Markups>
    </PassengerFare>
  </PTC_FareBreakdown>
</PTC_FareBreakdowns>

LINQ、私はこれまで試しましたが、

  var Adult = from Main in xd.Descendants(ns + "PTC_FareBreakdown")
              from Sub1 in Main.Elements(ns + "PassengerTypeQuantity")
              where Sub1.Attribute("Code").Value == "ADT"
              from Sub2 in Main.Elements(ns + "PassengerFare").Elements(ns + "Taxes").Elements(ns + "Tax")
              where Sub2.Attribute("TaxCode").Value == "OC"
              select new
              {
                  OC = Sub2.Attributes("Amount").Sum(nd => Int32.Parse(nd.Value)),
              };

値は233,218,440および173として返されます。ただし、すべての値の合計[233 + 218 + 440 + 173=1064]を返す必要があります。

さらに詳しい情報が必要な場合はお知らせください。

4

2 に答える 2

1
 var query = xd.Descendants(ns + "PTC_FareBreakdown")
               .Elements(ns + "PassengerFare")
               .Elements(ns + "Taxes")
               .Elements(ns + "Tax")
               .Where(tax => (string)tax.Attribute("TaxCode") == "OC") 
               .Sum(tax => (int)tax.Attribute("Amount"));    

結果:1064

于 2012-12-18T11:00:15.540 に答える
1

LINQキーワード構文を使用した@lazyberenzovskyの回答:

var Adult = (
    from tax in xd.Descendants("PTC_FareBreakdown")
                   .Elements("PassengerFare")
                   .Elements("Taxes")
                   .Elements("Tax")
    where (string)tax.Attribute("TaxCode") == "OC"
    select (int)tax.Attribute("Amount")
).Sum();

もちろん、おそらく次のように使用できます。

var Adult = (
    from tax in xd.Descendants("Tax")
    where (string)tax.Attribute("TaxCode") == "OC"
    select (int)tax.Attribute("Amount")
).Sum();

これがTaxXML 内の要素を持つ唯一の場所である場合。

于 2012-12-18T13:15:21.807 に答える