2012-11-22 69 views
1

我想将子节点追加到父节点中。什么使用xslt将下一个子节点追加到父节点

这是XML。我想追加order_d到order_h如果我的下order_h order_no是order_h

<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_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> 
     </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"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421424" profoma_po="421425"> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421424" color_code="257" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    </order> 
    <order> 
    <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="1" order_no="421425" color_code="730" manufacturer="100783"> 

     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="3" order_no="421425" color_code="002" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421425" color_code="257" manufacturer="100783"> 
        </order_d> 
    </order_h> 
    </order> 
    <order> 
    <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421426" color_code="000" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421426" color_code="002" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421426" color_code="450" manufacturer="100783"> 
        </order_d> 
    </order_h> 
    </order> 
    <order> 
    <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421427" color_code="000" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421427" color_code="002" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421427" color_code="450" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    </order> 
</document> 

等于下列order_no,我需要如下

<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"/> 
     <order_d owner="GD" item_no="100000014" line_no="3" order_no="421424" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421424" color_code="257" manufacturer="100783"/> 
     </order_h> 
    </order> 
    <order> 
     <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="1" order_no="421425" color_code="730" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000014" line_no="3" order_no="421425" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421425" color_code="257" manufacturer="100783"/> 
     </order_h> 
    </order> 
    <order> 
     <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421426" color_code="000" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421426" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421426" color_code="450" manufacturer="100783"/> 
     </order_h> 
    </order> 
    <order> 
     <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421427" color_code="000" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421427" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421427" color_code="450" manufacturer="100783"/> 
     </order_h> 
    </order> 
</document> 

感谢提前输出

回答

1

这种转变

<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|order_d/node()"/> 

<xsl:template match="order_h[1]"> 
    <xsl:copy> 
    <xsl:apply-templates select= 
    "@*|node()|following-sibling::*/node()"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

当所提供的XML文档施加(校正要由良好的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_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> 
     </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"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421424" profoma_po="421425"> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421424" color_code="257" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    </order> 
    <order> 
    <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="1" order_no="421425" color_code="730" manufacturer="100783"> 

     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="3" order_no="421425" color_code="002" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421425" color_code="257" manufacturer="100783"> 
        </order_d> 
    </order_h> 
    </order> 
    <order> 
    <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421426" color_code="000" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421426" color_code="002" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421426" color_code="450" manufacturer="100783"> 
        </order_d> 
    </order_h> 
    </order> 
    <order> 
    <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421427" color_code="000" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421427" color_code="002" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421427" color_code="450" manufacturer="100783"> 
     </order_d> 
    </order_h> 
    </order> 
</document> 

产生想要的,正确的结果:

<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"/> 
     <order_d owner="GD" item_no="100000014" line_no="3" order_no="421424" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421424" color_code="257" manufacturer="100783"/> 
     </order_h> 
    </order> 
    <order> 
     <order_h owner="GD" order_no="421425" profoma_po="421426"> 
     <order_d owner="GD" item_no="100000014" line_no="1" order_no="421425" color_code="730" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000014" line_no="3" order_no="421425" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000014" line_no="2" order_no="421425" color_code="257" manufacturer="100783"/> 
     </order_h> 
    </order> 
    <order> 
     <order_h owner="GD" order_no="421426" profoma_po="421427"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421426" color_code="000" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421426" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421426" color_code="450" manufacturer="100783"/> 
     </order_h> 
    </order> 
    <order> 
     <order_h owner="GD" order_no="421427" profoma_po="421428"> 
     <order_d owner="GD" item_no="100000015" line_no="1" order_no="421427" color_code="000" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="3" order_no="421427" color_code="002" manufacturer="100783"/> 
     <order_d owner="GD" item_no="100000015" line_no="2" order_no="421427" color_code="450" manufacturer="100783"/> 
     </order_h> 
    </order> 
</document> 

说明

正确使用并覆盖了identity rule

+0

@Dimitre ..非常感谢美化代码,但是我的xml稍作修改,并在上面进行更新。你能不能让我知道需要在xslt中修改哪些内容才能获得输出结果。请不要让你烦恼。谢谢您的帮助。 – Tarak

+0

@ user1760923,您的问题已完全解答。无论何时“更改”源XML文档,您实际上都有一个新问题。建议不要连续改变问题,而是提出一个新问题。因此,我建议您将问题恢复到原始状态并提出一个新问题。另外,请*,接受*这个答案(通过点击答案旁边的复选标记)。 –

+0

A您建议我已将其替换为之前的xml并标记为已回答。请回复这个http://stackoverflow.com/questions/13534647/appending-child-node-into-the-parent-node。 – Tarak

相关问题