2012-06-20 41 views
0

我试图使用开始时看起来像一个样式表转换一些XML:XSLT转化重复元素融入其中,同时维持秩序

 <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>001</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>002</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>003</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 

进入这个:

 <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>001</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     <m10:LINE_NO>002</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     <m10:LINE_NO>003</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>100</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>0</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 

我不是太强在xslt所以这可能是一个基本的,但我迄今试过的一切都回来了:

 <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>001</m10:LINE_NO> 
     <m10:LINE_NO>002</m10:LINE_NO> 
     <m10:LINE_NO>003</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_AMT>100</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
     <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
     <m10:APPR_ITEM_TAX>0</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 

任何建议将真正理解...

预先感谢您

+0

请看我的回答。你能否接受最好的答案?点击您想要选择的答案旁边的复选标记。 –

回答

0

您发布的例子是不是有效的XML文档 - 要变换的一个具有多个根元素也不显示了命名空间M10前缀被绑定到。

你可以使用身份转换来实现你想要的。我修改了你的输入文档,以便可以编写一个xslt。我输入的文件看起来是这样的:

<root xmlns:m10="m10"> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>001</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>002</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>003</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
</root> 

我创建了以下样式:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:m10="m10"> 
    <xsl:output method="xml" indent="yes"/> 


    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="root"> 
    <m10:RESPONSE_DETAIL> 
     <xsl:apply-templates /> 
    </m10:RESPONSE_DETAIL> 
    </xsl:template> 

    <xsl:template match="m10:RESPONSE_DETAIL"> 
    <xsl:apply-templates select="*"/> 
    </xsl:template> 
</xsl:stylesheet> 

这将您的输入文档:

<?xml version="1.0" encoding="utf-8"?> 
<m10:RESPONSE_DETAIL xmlns:m10="m10" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
    <m10:LINE_NO>001</m10:LINE_NO><m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT><m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX><m10:TAX_FLAG>N</m10:TAX_FLAG> 
    <m10:LINE_NO>002</m10:LINE_NO><m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT><m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX><m10:TAX_FLAG>N</m10:TAX_FLAG> 
    <m10:LINE_NO>003</m10:LINE_NO><m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT><m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX><m10:TAX_FLAG>N</m10:TAX_FLAG> 
</m10:RESPONSE_DETAIL> 
0

这XSLT 1.0样式表...

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:m10="m10"> 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="m10:RESPONSE_DETAIL[1]"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*" /> 
    <xsl:apply-templates select="../m10:RESPONSE_DETAIL/*" /> 
    </xsl:copy>  
</xsl:template> 

<xsl:template match="m10:RESPONSE_DETAIL" /> 

</xsl:stylesheet> 

...将转换此输入文件

<root xmlns:m10="m10" > 
<m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>001</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>002</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
    </m10:RESPONSE_DETAIL> 
    <m10:RESPONSE_DETAIL> 
     <m10:LINE_NO>003</m10:LINE_NO> 
     <m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT> 
     <m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX> 
     <m10:TAX_FLAG>N</m10:TAX_FLAG> 
</m10:RESPONSE_DETAIL> 
</root> 

根据需要。