I want to append mulitple child nodes order_d in from order_h matching order_no under each order_h.
Here is my xml
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<order>
<order_h owner="GD" order_no="421424" profoma_po="421425">
<order_d owner="GD" item_no="100000014" line_no="1" order_no="421424" color_code="730" manufacturer="100783">
<size assoc_id="69398" match_id="14" pack_code="BULK" size_range="2" model_name="SIZE SCALE 2" size_id="SIZE SCALE 2">
<Size_b assoc_id="69398" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69398" ship_pack="BULK" ctn_sku="5602001" size_code="S" alloc_qty="26" plan_pct_ratio="34" row_no="0" sort_value="6"/>
</Size_b>
<Size_b assoc_id="69398" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69398" ship_pack="BULK" ctn_sku="5602182" size_code="L" alloc_qty="11" plan_pct_ratio="15" row_no="0" sort_value="8"/>
</Size_b>
<Size_b assoc_id="69398" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69398" ship_pack="BULK" ctn_sku="5602078" size_code="M" alloc_qty="21" plan_pct_ratio="27.5" row_no="0" sort_value="7"/>
</Size_b>
<Size_b assoc_id="69398" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69398" ship_pack="BULK" ctn_sku="5602060" size_code="XS" alloc_qty="18" plan_pct_ratio="23.5" row_no="0" sort_value="5"/>
</Size_b>
</size>
</order_d>
</order_h>
<order_h owner="GD" order_no="421425" profoma_po="421425">
<order_d owner="GD" item_no="100000014" line_no="3" order_no="421424" color_code="002" manufacturer="100783">
<size assoc_id="69400" match_id="14" pack_code="BULK" size_range="2" model_name="SIZE SCALE 2" size_id="SIZE SCALE 2">
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602019" size_code="S" alloc_qty="17" plan_pct_ratio="34" row_no="0" sort_value="6"/>
</Size_b>
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602238" size_code="M" alloc_qty="14" plan_pct_ratio="27.5" row_no="0" sort_value="7"/>
</Size_b>
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602131" size_code="XS" alloc_qty="12" plan_pct_ratio="23.5" row_no="0" sort_value="5"/>
</Size_b>
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602027" size_code="L" alloc_qty="8" plan_pct_ratio="15" row_no="0" sort_value="8"/>
</Size_b>
</size>
</order_d>
</order_h>
<order_h owner="GD" order_no="421424" profoma_po="421425">
<order_d owner="GD" item_no="100000014" line_no="3" order_no="421424" color_code="002" manufacturer="100783">
<size assoc_id="69400" match_id="14" pack_code="BULK" size_range="2" model_name="SIZE SCALE 2" size_id="SIZE SCALE 2">
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602019" size_code="S" alloc_qty="17" plan_pct_ratio="34" row_no="0" sort_value="6"/>
</Size_b>
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602238" size_code="M" alloc_qty="14" plan_pct_ratio="27.5" row_no="0" sort_value="7"/>
</Size_b>
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602131" size_code="XS" alloc_qty="12" plan_pct_ratio="23.5" row_no="0" sort_value="5"/>
</Size_b>
<Size_b assoc_id="69400" row_no="0" pct_ratio="PCT" total_pct="100" priority="0" ship_pack="BULK">
<size_d assoc_id="69400" ship_pack="BULK" ctn_sku="5602027" size_code="L" alloc_qty="8" plan_pct_ratio="15" row_no="0" sort_value="8"/>
</Size_b>
</size>
</order_d>
</order_h>
</order>
</document>
And this want the xslt i am current using which got it from my earlier post
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="order_h"/>
<xsl:template match="order_h[1]">
<xsl:copy>
<xsl:apply-templates select=
"@*|node()|following-sibling::*/node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Expected output
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<order>
<order_h order_no="421424" owner="GD" profoma_po="421425">
<order_d color_code="730" item_no="100000014" line_no="1" manufacturer="100783"
order_no="421424"
owner="GD">
<size assoc_id="69398" match_id="14" model_name="SIZE SCALE 2" pack_code="BULK"
size_id="SIZE SCALE 2"
size_range="2">
<Size_b assoc_id="69398" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="26" assoc_id="69398" ctn_sku="5602001" plan_pct_ratio="34"
row_no="0"
ship_pack="BULK"
size_code="S"
sort_value="6"/>
</Size_b>
<Size_b assoc_id="69398" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="11" assoc_id="69398" ctn_sku="5602182" plan_pct_ratio="15"
row_no="0"
ship_pack="BULK"
size_code="L"
sort_value="8"/>
</Size_b>
<Size_b assoc_id="69398" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="21" assoc_id="69398" ctn_sku="5602078" plan_pct_ratio="27.5"
row_no="0"
ship_pack="BULK"
size_code="M"
sort_value="7"/>
</Size_b>
<Size_b assoc_id="69398" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="18" assoc_id="69398" ctn_sku="5602060" plan_pct_ratio="23.5"
row_no="0"
ship_pack="BULK"
size_code="XS"
sort_value="5"/>
</Size_b>
</size>
</order_d>
<order_d color_code="002" item_no="100000014" line_no="3" manufacturer="100783"
order_no="421424"
owner="GD">
<size assoc_id="69400" match_id="14" model_name="SIZE SCALE 2" pack_code="BULK"
size_id="SIZE SCALE 2"
size_range="2">
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="17" assoc_id="69400" ctn_sku="5602019" plan_pct_ratio="34"
row_no="0"
ship_pack="BULK"
size_code="S"
sort_value="6"/>
</Size_b>
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="14" assoc_id="69400" ctn_sku="5602238" plan_pct_ratio="27.5"
row_no="0"
ship_pack="BULK"
size_code="M"
sort_value="7"/>
</Size_b>
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="12" assoc_id="69400" ctn_sku="5602131" plan_pct_ratio="23.5"
row_no="0"
ship_pack="BULK"
size_code="XS"
sort_value="5"/>
</Size_b>
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="8" assoc_id="69400" ctn_sku="5602027" plan_pct_ratio="15" row_no="0"
ship_pack="BULK"
size_code="L"
sort_value="8"/>
</Size_b>
</size>
</order_d>
</order_h>
<order_h order_no="421425" owner="GD" profoma_po="421425">
<order_d color_code="002" item_no="100000014" line_no="3" manufacturer="100783"
order_no="421424"
owner="GD">
<size assoc_id="69400" match_id="14" model_name="SIZE SCALE 2" pack_code="BULK"
size_id="SIZE SCALE 2"
size_range="2">
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="17" assoc_id="69400" ctn_sku="5602019" plan_pct_ratio="34"
row_no="0"
ship_pack="BULK"
size_code="S"
sort_value="6"/>
</Size_b>
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="14" assoc_id="69400" ctn_sku="5602238" plan_pct_ratio="27.5"
row_no="0"
ship_pack="BULK"
size_code="M"
sort_value="7"/>
</Size_b>
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="12" assoc_id="69400" ctn_sku="5602131" plan_pct_ratio="23.5"
row_no="0"
ship_pack="BULK"
size_code="XS"
sort_value="5"/>
</Size_b>
<Size_b assoc_id="69400" pct_ratio="PCT" priority="0" row_no="0" ship_pack="BULK"
total_pct="100">
<size_d alloc_qty="8" assoc_id="69400" ctn_sku="5602027" plan_pct_ratio="15" row_no="0"
ship_pack="BULK"
size_code="L"
sort_value="8"/>
</Size_b>
</size>
</order_d>
</order_h>
</order>
</document>
Could some one please let me know how can i get the expected output. @ Dimitre sorry for not explaining my exact requirement in my earlier post.
Thanks in adavance.
If you are using XSLT1.0 then this is a job for a technique called Muenchian Grouping. You are grouping order_h elements by their order_no attribute, in which case you define the following key:
Next, for each order_h element, you need to match the elements that occur first in the group for their given order_no attribute. You do this as follows:
To explain how this works, the expression
key('order', @order_no)[1]
returns the first element in the key for the current attribute. You then compare this with the current element to see if it matches.Within this template, you can then copy the element, and output all the child elements like so
You would also need a template to match other order_h elements so that they are no output twice:
Here is the full XSLT
This should hopefully give you the output you need.
If you were using XSLT2.0, you could make use of the xsl:for-each-group to achieve the same thing