2012-06-20 80 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> 

根據需要。