I am trying to insert a container when the count of an attribute = X and a 2nd group based on the value of an attribute. The two attributes are not related.
Using XSLT- V1
I would like to first group based on the value of an attribute. Ie. anytime ID=01 would create a group. I would then like to insert a new attribute/ container when the count = X.
I am able to group based on attribute value, but not sure how to determine count and add a new container.
I have XML that looks like the following:
<Items>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>01-A</Rev>
<Rev_Owner>User2</Rev_Owner>
<Rev_Code>US</Rev_Code>
</Details>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>01-B</Rev>
<Rev_Owner>User3</Rev_Owner>
<Rev_Code>CN</Rev_Code>
</Details>
<Details>
<ID>02</ID>
<Name>Name for 02</Name>
<Owner>User1</Owner>
<Rev>02-A</Rev>
<Rev_Owner>User4</Rev_Owner>
<Rev_Code>MX</Rev_Code>
</Details>
<Details>
<ID>03</ID>
<Name>Name for 03</Name>
<Owner>User1</Owner>
<Rev>03-A</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>CA</Rev_Code>
</Details>
<Details>
<ID>02</ID>
<Name>Name for 02</Name>
<Owner>User1</Owner>
<Rev>02-B</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>AU</Rev_Code>
</Details>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>02-C</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>JP</Rev_Code>
</Details>
</Items>
I have below XSL that creates expected group for item ID
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:key name="ItemGroup" match="Details" use="ID"/>
<xsl:template match="/*">
<Items>
<xsl:apply-templates/>
</Items>
</xsl:template>
<xsl:template match="Details[generate-id()=generate-id(key('ItemGroup',ID)[1])]">
<ItemID name="{ID}">
<xsl:copy-of select="key('ItemGroup',ID)"/>
</ItemID>
</xsl:template>
<xsl:template match="Details[not(generate-id()=generate-id(key('ItemGroup',ID)[1]))]"/>
</xsl:stylesheet>
Output for aboe XSL:
<Items>
<ItemID name="01">
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>01-A</Rev>
<Rev_Owner>User2</Rev_Owner>
<Rev_Code>US</Rev_Code>
</Details>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>01-B</Rev>
<Rev_Owner>User3</Rev_Owner>
<Rev_Code>CN</Rev_Code>
</Details>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>02-C</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>JP</Rev_Code>
</Details>
</ItemID>
<ItemID name="02">
<Details>
<ID>02</ID>
<Name>Name for 02</Name>
<Owner>User1</Owner>
<Rev>02-A</Rev>
<Rev_Owner>User4</Rev_Owner>
<Rev_Code>MX</Rev_Code>
</Details>
<Details>
<ID>02</ID>
<Name>Name for 02</Name>
<Owner>User1</Owner>
<Rev>02-B</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>AU</Rev_Code>
</Details>
</ItemID>
<ItemID name="03">
<Details>
<ID>03</ID>
<Name>Name for 03</Name>
<Owner>User1</Owner>
<Rev>03-A</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>CA</Rev_Code>
</Details>
</ItemID>
</Items>
I would now like to add a variable for count of "details" = 3 for example (it would really be somewhere between 1,000- 5,000) and then expect below output
<Items>
<Split>
<ItemID name="01">
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>01-A</Rev>
<Rev_Owner>User2</Rev_Owner>
<Rev_Code>US</Rev_Code>
</Details>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>01-B</Rev>
<Rev_Owner>User3</Rev_Owner>
<Rev_Code>CN</Rev_Code>
</Details>
<Details>
<ID>01</ID>
<Name>Name for 01</Name>
<Owner>User1</Owner>
<Rev>02-C</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>JP</Rev_Code>
</Details>
</ItemID>
</Split>
<Split>
<ItemID name="02">
<Details>
<ID>02</ID>
<Name>Name for 02</Name>
<Owner>User1</Owner>
<Rev>02-A</Rev>
<Rev_Owner>User4</Rev_Owner>
<Rev_Code>MX</Rev_Code>
</Details>
<Details>
<ID>02</ID>
<Name>Name for 02</Name>
<Owner>User1</Owner>
<Rev>02-B</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>AU</Rev_Code>
</Details>
</ItemID>
<ItemID name="03">
<Details>
<ID>03</ID>
<Name>Name for 03</Name>
<Owner>User1</Owner>
<Rev>03-A</Rev>
<Rev_Owner>User5</Rev_Owner>
<Rev_Code>CA</Rev_Code>
</Details>
</ItemID>
</Split>
<Split>
continued....
</Items>
many thanks!