XSLTを使用して「グループのグループ」を作成する必要があります。
以下は、私の XML および XSL ファイルです。この SOリンクを使用して Muenchian グループ化を適用しました。ファイルを短くして、問題を表す必要な要素のみを表示しようとしました。
XML ファイル
<IO_SearchShoppingFilesResult xmlns="http://schemas.datacontract.org/2004/07/Trevoo.WS.IO.Shopping" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ShoppingFiles
xmlns:a="http://schemas.datacontract.org/2004/07/Trevoo.WS.Entities.Shopping"
xmlns:b="http://schemas.datacontract.org/2004/07/Trevoo.WS.Entities.Air">
<a:T_ShoppingFile>
....
<b:T_AirBookingItem>
...
<a:LocalPaxType>ADT</a:LocalPaxType>
...
</b:T_AirBookingItem>
<b:T_AirBookingItem>
...
<a:LocalPaxType>CHD</a:LocalPaxType>
...
</b:T_AirBookingItem>
<b:T_AirBookingItem>
...
<a:LocalPaxType>INF</a:LocalPaxType>
...
</b:T_AirBookingItem>
...
</a:T_ShoppingFile>
<a:T_ShoppingFile>
....
<b:T_AirBookingItem>
...
<a:LocalPaxType>ADT</a:LocalPaxType>
...
</b:T_AirBookingItem>
...
</a:T_ShoppingFile>
</ShoppingFiles>
</IO_SearchShoppingFilesResult>
XSL ファイル
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:res="http://schemas.datacontract.org/2004/07/Trevoo.WS.IO.Shopping"
xmlns:a="http://schemas.datacontract.org/2004/07/Trevoo.WS.Entities.Shopping"
xmlns:b="http://schemas.datacontract.org/2004/07/Trevoo.WS.Entities.Air"
xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
xmlns:bb="http://schemas.datacontract.org/2004/07/Trevoo.WS.Entities.Shopping.Views">
<xsl:output method="xml" indent="yes" />
<xsl:key name="travelerGroup"
match="res:IO_SearchShoppingFilesResult/res:ShoppingFiles/a:T_ShoppingFile[position()=1]/a:AirBookings/b:T_AirBooking/b:BookingItems/b:T_AirBookingItem"
use="b:PaxReference/a:LocalPaxType" />
<xsl:template match="/">
<xsl:element name="PNRViewRS">
<xsl:apply-templates
select="res:IO_SearchShoppingFilesResult/res:ShoppingFiles" />
</xsl:element>
</xsl:template>
<xsl:template match="res:ShoppingFiles">
<!-- For FareGroup, Traveler, Telephone, EmailAddress -->
<xsl:apply-templates select="a:T_ShoppingFile" />
...
</xsl:template>
<xsl:template match="a:T_ShoppingFile">
...
<xsl:apply-templates
select="a:AirBookings/b:T_AirBooking/b:BookingItems/b:T_AirBookingItem[generate-id() = generate-id(key('travelerGroup', b:PaxReference/a:LocalPaxType)[1])]" />
...
</xsl:template>
...
<xsl:template match="b:T_AirBookingItem">
...
<!-- Line 1 -->
<xsl:value-of
select="count(key('travelerGroup', b:PaxReference/a:LocalPaxType))" />
...
</xsl:template>
ご覧のとおり、 に申し込みkey
ました<b:T_AirBookingItem>
。そして、複数<b:T_AirBookingItem>
が複数存在します<a:T_ShoppingFile>
。
<a:T_ShoppingFile>
ここで、それぞれを個別に処理し、その中のすべての<b:T_AirBookingItem>
存在にグループ化を適用したいと考えています。このコードでは、すべての<b:T_AirBookingItem>
が<a:T_ShoppingFile>
一度にグループ化されます。
行 1 は、この変換の結果の 1 つを示しています。単一<b:T_AirBookingItem>
の. <a:LocalPaxType>
_ _ <a:T_ShoppingFile>
ただし、<b:T_AirBookingItem>
代わりに XML 全体のすべてを考慮します。
したがって、「1」の ADT 数を取得する必要がある場所で、「2」を取得しています。
どうすれば対処できますか?