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

при необходимости.

Смежные вопросы