Следующие группы стилей по VendorID
. Обратите внимание, что вы не говорите, какие элементы являются частью адреса, а какие нет. В этой таблице стилей предполагается, что только VendorID
и VendorName
не являются частью адреса. Отредактируйте соответственно.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="byVendor" match="root/pre" use="Table1/VendorID" />
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="root/pre" />
<xsl:template
match="root/pre[generate-id() =
generate-id(key('byVendor', Table1/VendorID))]">
<xsl:call-template name="identity"/>
</xsl:template>
<xsl:template match="Table1">
<xsl:copy>
<xsl:apply-templates select="@*|VendorID|VendorName" />
<Addresses>
<xsl:apply-templates select="key('byVendor', VendorID)/Table1"
mode="address" />
</Addresses>
</xsl:copy>
</xsl:template>
<xsl:template match="Table1" mode="address">
<Address>
<xsl:apply-templates
select="*[not(self::VendorID or self::VendorName)]" />
</Address>
</xsl:template>
</xsl:stylesheet>
Применительно к этому входу:
<code><root>
<pre>
<Table1>
<VendorID>123456</VendorID>
<VendorName>StackOverflow Inc</VendorName>
<Type>ADDRESS</Type>
<TypeName>Mailing</TypeName>
<DescriptionType>Main Mailing</DescriptionType>
<Description>P O Box 01 Manama Bahrain</Description>
<Online>0</Online>
<CommodityTypeDesc />
</Table1>
<Table1>
<VendorID>123456</VendorID>
<VendorName>StackOverflow Inc</VendorName>
<Type>ADDRESS</Type>
<TypeName>Remittance</TypeName>
<DescriptionType>Main Remittance</DescriptionType>
<Description>P O Box 02 Manama Bahrain</Description>
<Online>0</Online>
<CommodityTypeDesc />
</Table1>
Выдает:
<code><root>
<pre>
<Table1>
<VendorID>123456</VendorID>
<VendorName>StackOverflow Inc</VendorName>
<Addresses>
<Address>
<Type>ADDRESS</Type>
<TypeName>Mailing</TypeName>
<DescriptionType>Main Mailing</DescriptionType>
<Description>P O Box 01 Manama Bahrain</Description>
<Online>0</Online>
<CommodityTypeDesc />
</Address>
<Address>
<Type>ADDRESS</Type>
<TypeName>Remittance</TypeName>
<DescriptionType>Main Remittance</DescriptionType>
<Description>P O Box 02 Manama Bahrain</Description>
<Online>0</Online>
<CommodityTypeDesc />
</Address>
</Addresses>
</Table1>