0

私は見つけることができるすべてについて読みましたが、これを機能させる方法を見つけていません。ノードまたはその親の値に基づいて、特定のノードからの合計を照会しようとしています。一部のノードは固有名を持つという基本的な要件を満たしている場合がありますが、それらの親は満たさない場合があるため、それらを無視する必要があります。SQL用語では、EXISTSまたはLIKE句を使用してこれにアプローチします。

私がやろうとしているのは

   SUM    ServiceAmounts 
   FROM   ChargeData elements 
   WHERE  ChargeDescription = 'subTotal-DistrubutionCharges' 
          AND Detail.ServiceType = 'electric' 
          AND NOT 
          (
              ChargeData has a sibling with ChargeDescription = 'Leased Outdoor Lighting' - the entire detail node should be ignored that contains the ChargeData element with 'Leased Outdoor Lighting'. 
          ) 

私のXSLバージョンは1.0です。

ソースXML:

    <Source>
      <Detail>
        <ServiceType>electric</ServiceType>
        <Charges>
           <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>19.8</ServiceAmount>
            <ChargeDescription>7% Sales Tax</ChargeDescription>
            <ChargeID>sales_tax</ChargeID>
          </ChargeData>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>282.8</ServiceAmount>
            <ChargeDescription>E-2 Demand</ChargeDescription>
            <ChargeID>usage_charge</ChargeID>
          </ChargeData>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>165.91</ServiceAmount>
            <ChargeDescription>7% Sales Tax</ChargeDescription>
            <ChargeID>sales_tax</ChargeID>
          </ChargeData>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>2370.15</ServiceAmount>
            <ChargeDescription>E-2 Commercial</ChargeDescription>
            <ChargeID>usage_charge</ChargeID>
          </ChargeData>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>2838.66</ServiceAmount>
            <Quantity>0</Quantity>
            <ChargeDescription>subTotal-DistributionCharges</ChargeDescription>
          </ChargeData>
        </Charges>
      </Detail>
      <Detail>
        <ServiceType>electric</ServiceType>
        <Charges>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>2.57</ServiceAmount>
            <ChargeDescription>7% Sales Tax</ChargeDescription>
            <ChargeID>sales_tax</ChargeID>
          </ChargeData>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>36.8</ServiceAmount>
            <ChargeDescription>Leased Outdoor Lighting</ChargeDescription>
            <ChargeID>usage_charge</ChargeID>
          </ChargeData>
          <ChargeData>
            <AllowanceChargeInd>C</AllowanceChargeInd>
            <ServiceAmount>39.37</ServiceAmount>
            <Quantity>0</Quantity>
            <ChargeDescription>subTotal-DistributionCharges</ChargeDescription>
          </ChargeData>
        </Charges>
      </Detail>
    </Source>

私のxsl、まあ私は複数を試し、行き止まりにぶつかり続けました:

    sum(//ChargeData[not(contains(ChargeDescription,'Leased Outdoor Lighting')) 
    and not(contains(Detail/Charges/ChargeData/ChargeDescription, 'subTotal'))  
    and ancestor::Detail/ServiceType='electric']/ServiceAmount) 

また

    sum(//ChargeData[contains(ChargeDescription, 'subTotal-DistributionCharges') 
    and ancestor::Detail/ServiceType='electric']/ServiceAmount)
    -
    sum(//ChargeData[contains(ChargeDescription, 'Leased Outdoor Lighting') 
    and ancestor::Detail/ServiceType='electric']/ServiceAmount)

多分これは不可能です。私ができないことの1つは、スキーマ/データ構造を変更することです。

4

1 に答える 1

0

要件に少し混乱していて、サンプルのタグが一致していません(<Source> </Bill>

これにより、サンプル内で基準に一致すると思われる単一のChargeData要素が選択されます

Detail
 [ServiceType="electric"]
 [not(Charges/ChargeData/ChargeDescription[.="Leased Outdoor Lighting"])]
 /Charges/ChargeData[ChargeDescription="subTotal-DistributionCharges"]

説明

  • Detail
    詳細子要素を選択
  • [ServiceType="electric"]
    値が「electric」の子ServiceType要素を持つDetail要素のみを選択します
  • [not(Charges/ChargeData/ChargeDescription[.="Leased Outdoor Lighting"])]
    除外文字列に一致する子孫ChargeDescriptionが提供されている詳細要素を除外します
  • /Charges/ChargeData[ChargeDescription="subTotal-DistributionCharges"]
    フィルタリングされたDetail要素の下で、子のChargeDescription一致文字列が提供されているChargeDataを選択します

それで

sum(
 Detail
 [ServiceType="electric"]
 [not(Charges/ChargeData/ChargeDescription[.="Leased Outdoor Lighting"])]
 /Charges/ChargeData[ChargeDescription="subTotal-DistributionCharges"]/ServiceAmount
)

収量

2838.6599999999999
于 2013-03-14T15:49:54.433 に答える