リクエストファイルを繰り返してビルドする必要があるxmlファイルがあります。私が書かれているXQueryは、私がproductCode != "NOT_AVAILABLE"
XQueryを使用してXMLファイルを反復処理してXMLリクエストを作成する方法は?
declare function local:constructSubscriberLineItems($LineItems){
for $productCode in distinct-values($LineItems/LineItem/ProductCode)
let $entries := $LineItems/LineItem[ProductCode = $productCode]
let $notAvailable := $entries[ProductCode/text() = "NOT_AVAILABLE"]
for $distinctProductType in distinct-values($notAvailable/ProductType)
let $productType := $notAvailable[ProductType = $distinctProductType]
for $distinctBillingCode in distinct-values($productType/BillingCode)
let $BillingCode := $productType[BillingCode = $distinctBillingCode]
let $subscriberLineItemDetails :=
<subscriberLineItemDetails>
<productType>{distinct-values($BillingCode/ProductType/text())}</productType>
<productCode>{distinct-values($BillingCode/ProductCode/text())}</productCode>
<billingCode>{distinct-values($BillingCode/BillingCode/text())}</billingCode>
<quantity>{sum($BillingCode/Quantity)}</quantity>
</subscriberLineItemDetails>
return $subscriberLineItemDetails
};
サンプルXML
<LineItems>
<LineItem>
<Id>01</Id>
<ProductCode>prod123456</ProductCode>
<BillingCode>CHE001</BillingCode>
<ProductType>HARDGOOD</ProductType>
<Quantity>10</Quantity>
</LineItem>
<LineItem>
<Id>02</Id>
<ProductCode>prod123456</ProductCode>
<BillingCode>CHE001</BillingCode>
<ProductType>HARDGOOD</ProductType>
<Quantity>10</Quantity>
</LineItem>
<LineItem>
<Id>03</Id>
<ProductCode>prod123456</ProductCode>
<BillingCode>CHE001</BillingCode>
<ProductType>HARDGOOD</ProductType>
<Quantity>10</Quantity>
</LineItem>
<LineItem>
<Id>04</Id>
<ProductCode>prod6789</ProductCode>
<BillingCode>CHE001</BillingCode>
<ProductType>HARDGOOD</ProductType>
<Quantity>4</Quantity>
</LineItem>
<LineItem>
<Id>05</Id>
<ProductCode>prod6789</ProductCode>
<BillingCode>CHE001</BillingCode>
<ProductType>HARDGOOD</ProductType>
<Quantity>5</Quantity>
</LineItem>
<LineItem>
<Id>06</Id>
<ProductCode>prod6789</ProductCode>
<BillingCode>CHE001</BillingCode>
<ProductType>HARDGOOD</ProductType>
<Quantity>7</Quantity>
</LineItem>
<LineItem>
<Id>07</Id>
<ProductCode>NOT_AVAILABLE</ProductCode>
<BillingCode>BANG001</BillingCode>
<ProductType>OPTIONAL_FEATURE</ProductType>
<Quantity>7</Quantity>
</LineItem>
<LineItem>
<Id>08</Id>
<ProductCode>NOT_AVAILABLE</ProductCode>
<BillingCode>BANG001</BillingCode>
<ProductType>OPTIONAL_FEATURE</ProductType>
<Quantity>7</Quantity>
</LineItem>
<LineItem>
<Id>09</Id>
<ProductCode>NOT_AVAILABLE</ProductCode>
<BillingCode>TRV001</BillingCode>
<ProductType>OPTIONAL_FEATURE</ProductType>
<Quantity>7</Quantity>
</LineItem>
<LineItem>
<Id>10</Id>
<ProductCode>NOT_AVAILABLE</ProductCode>
<BillingCode>BANG001</BillingCode>
<ProductType>INCLUDED_FEATURE</ProductType>
<Quantity>7</Quantity>
</LineItem>
<LineItem>
<Id>11</Id>
<ProductCode>NOT_AVAILABLE</ProductCode>
<BillingCode>BANG001</BillingCode>
<ProductType>INCLUDED_FEATURE</ProductType>
<Quantity>7</Quantity>
</LineItem>
<LineItem>
<Id>12</Id>
<ProductCode>NOT_AVAILABLE</ProductCode>
<BillingCode>TRV001</BillingCode>
<ProductType>INCLUDED_FEATURE</ProductType>
<Quantity>7</Quantity>
</LineItem>
</LineItems>
予想される出力
<subscriberLineItemDetails>
<productType>HARDGOOD</productType>
<productCode>prod123456</productCode>
<billingCode>CHE001</billingCode>
<quantity>30</quantity>
</subscriberLineItemDetails>
<subscriberLineItemDetails>
<productType>HARDGOOD</productType>
<productCode>prod6789</productCode>
<billingCode>CHE001</billingCode>
<quantity>16</quantity>
</subscriberLineItemDetails>
<subscriberLineItemDetails>
<productType>OPTIONAL_FEATURE</productType>
<productCode>NOT_AVAILABLE</productCode>
<billingCode>BANG001</billingCode>
<quantity>14</quantity>
</subscriberLineItemDetails>
<subscriberLineItemDetails>
<productType>OPTIONAL_FEATURE</productType>
<productCode>NOT_AVAILABLE</productCode>
<billingCode>TRV001</billingCode>
<quantity>7</quantity>
</subscriberLineItemDetails>
<subscriberLineItemDetails>
<productType>INCLUDED_FEATURE</productType>
<productCode>NOT_AVAILABLE</productCode>
<billingCode>BANG001</billingCode>
<quantity>14</quantity>
</subscriberLineItemDetails>
<subscriberLineItemDetails>
<productType>INCLUDED_FEATURE</productType>
<productCode>NOT_AVAILABLE</productCode>
<billingCode>TRV001</billingCode>
<quantity>7</quantity>
</subscriberLineItemDetails>
どのバージョンのXQuery /実行エンジンですか?これが3.0だった場合、あなたのコードはおそらく単純化されるでしょう。 –
@CharlesDuffyはいバージョン3.0 – Beginner