2017-10-04 14 views
1

J'ai besoin de transformer un xml en utilisant xslt afin de mettre tous les nœuds avec le même "ans: numeroGuiaOrigem" et "ans: numeroGuiaOperadora" dans le même nœud "ans: opcaoRecursoGuia".Transformer xml avec xslt dans une nouvelle disposition

J'ai posté ci-dessous le xml source et le xml requis.

Je suis un débutant avec xslt. J'ai lu quelques papiers mais je n'ai pas réussi à faire cette transformation.

Quelqu'un pourrait m'aider?

Mon xslt est:

<xsl:transform 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*" /> 

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

    <xsl:template match="ans:opcaoRecursoGuia"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()" /> 
     <xsl:for-each select=".//ans:itensGuia" > 
     <xsl:copy> 
      <xsl:copy-of select="ans:itensGuia" /> 
      </xsl:copy> 
     </xsl:for-each> 
    </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

// source de

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <ans:mensagemTISS xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_02_00.xsd"> 
     <ans:cabecalho> 
     <ans:versaoPadrao>3.02.00</ans:versaoPadrao> 
     </ans:cabecalho> 
     <ans:prestadorParaOperadora> 
     <ans:recursoGlosa> 
      <ans:guiaRecursoGlosa> 
      <ans:registroANS>005711</ans:registroANS> 
      <ans:numeroGuiaRecGlosaPrestador>431089079</ans:numeroGuiaRecGlosaPrestador> 
      <ans:opcaoRecurso> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912301</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290391</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-23</ans:dataInicio> 
        <ans:dataFim>2017-06-23</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>18</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912301</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290391</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-23</ans:dataInicio> 
        <ans:dataFim>2017-06-23</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>20</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912302</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290392</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-23</ans:dataInicio> 
        <ans:dataFim>2017-06-23</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>18</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912302</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290392</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-23</ans:dataInicio> 
        <ans:dataFim>2017-06-23</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>20</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912303</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290393</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-23</ans:dataInicio> 
        <ans:dataFim>2017-06-23</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>18</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912303</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290393</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-23</ans:dataInicio> 
        <ans:dataFim>2017-06-23</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>20</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
       <ans:recursoGuia> 
       <ans:numeroGuiaOrigem>430912304</ans:numeroGuiaOrigem> 
       <ans:numeroGuiaOperadora>24000000000605290394</ans:numeroGuiaOperadora> 
       <ans:opcaoRecursoGuia> 
        <ans:itensGuia> 
        <ans:dataInicio>2017-06-27</ans:dataInicio> 
        <ans:dataFim>2017-06-27</ans:dataFim> 
        <ans:procRecurso> 
         <ans:codigoTabela>18</ans:codigoTabela> 
        </ans:procRecurso> 
        <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
        </ans:itensGuia> 
       </ans:opcaoRecursoGuia> 
       </ans:recursoGuia> 
      </ans:opcaoRecurso> 
      </ans:guiaRecursoGlosa> 
     </ans:recursoGlosa> 
     </ans:prestadorParaOperadora> 
    </ans:mensagemTISS> 

// nécessaire

<?xml version="1.0" encoding="ISO-8859-1"?> 
<ans:mensagemTISS xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_02_00.xsd"> 
    <ans:cabecalho> 
    <ans:versaoPadrao>3.02.00</ans:versaoPadrao> 
    </ans:cabecalho> 
    <ans:prestadorParaOperadora> 
    <ans:recursoGlosa> 
     <ans:guiaRecursoGlosa> 
     <ans:registroANS>005711</ans:registroANS> 
     <ans:numeroGuiaRecGlosaPrestador>431089079</ans:numeroGuiaRecGlosaPrestador> 
     <ans:opcaoRecurso> 
      <ans:recursoGuia> 
      <ans:numeroGuiaOrigem>430912301</ans:numeroGuiaOrigem> 
      <ans:numeroGuiaOperadora>24000000000605290391</ans:numeroGuiaOperadora> 
      <ans:opcaoRecursoGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-23</ans:dataInicio> 
       <ans:dataFim>2017-06-23</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>18</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
       </ans:itensGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-23</ans:dataInicio> 
       <ans:dataFim>2017-06-23</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>20</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
       </ans:itensGuia> 
      </ans:opcaoRecursoGuia> 
      </ans:recursoGuia> 
      <ans:recursoGuia> 
      <ans:numeroGuiaOrigem>430912302</ans:numeroGuiaOrigem> 
      <ans:numeroGuiaOperadora>24000000000605290392</ans:numeroGuiaOperadora> 
      <ans:opcaoRecursoGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-23</ans:dataInicio> 
       <ans:dataFim>2017-06-23</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>18</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
       </ans:itensGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-23</ans:dataInicio> 
       <ans:dataFim>2017-06-23</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>20</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
       </ans:itensGuia> 
      </ans:opcaoRecursoGuia> 
      </ans:recursoGuia> 
      <ans:recursoGuia> 
      <ans:numeroGuiaOrigem>430912303</ans:numeroGuiaOrigem> 
      <ans:numeroGuiaOperadora>24000000000605290393</ans:numeroGuiaOperadora> 
      <ans:opcaoRecursoGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-23</ans:dataInicio> 
       <ans:dataFim>2017-06-23</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>18</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
       </ans:itensGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-23</ans:dataInicio> 
       <ans:dataFim>2017-06-23</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>20</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
       </ans:itensGuia> 
      </ans:opcaoRecursoGuia> 
      </ans:recursoGuia> 
      <ans:recursoGuia> 
      <ans:numeroGuiaOrigem>430912304</ans:numeroGuiaOrigem> 
      <ans:numeroGuiaOperadora>24000000000605290394</ans:numeroGuiaOperadora> 
      <ans:opcaoRecursoGuia> 
       <ans:itensGuia> 
       <ans:dataInicio>2017-06-27</ans:dataInicio> 
       <ans:dataFim>2017-06-27</ans:dataFim> 
       <ans:procRecurso> 
        <ans:codigoTabela>18</ans:codigoTabela> 
       </ans:procRecurso> 
       <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
       </ans:itensGuia> 
      </ans:opcaoRecursoGuia> 
      </ans:recursoGuia> 
     </ans:opcaoRecurso> 
     </ans:guiaRecursoGlosa> 
    </ans:recursoGlosa> 
    </ans:prestadorParaOperadora> 
</ans:mensagemTISS> 

Répondre

2

Ceci est un cas de muenchian-grouping qui peut être réalisé en utilisant le <xsl:key> pour effectuer le groupement. Puisque XSLT 1.0 est utilisé, l'explication ci-dessous est conforme à la version utilisée.

Comme spécifié dans la question, le regroupement doit être effectué sur les valeurs des nœuds <ans:numeroGuiaOrigem> et <ans:numeroGuiaOperadora>. Par conséquent, une clé composite est définie comme ci-dessous en utilisant un séparateur |.

<xsl:key name="grpKey" match="ans:recursoGuia" use="concat(ans:numeroGuiaOrigem,'|',ans:numeroGuiaOperadora)" /> 

En utilisant cette clé, la correspondance de modèle est effectuée pour les nœuds <ans:recursoGuia>.

<xsl:template match="ans:recursoGuia[generate-id() = generate-id(key('grpKey',concat(ans:numeroGuiaOrigem,'|',ans:numeroGuiaOperadora))[1])]"> 

Le code XSLT complet est le suivant.

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*" /> 

    <!-- create grouping key using the required nodes --> 
    <xsl:key name="grpKey" match="ans:recursoGuia" use="concat(ans:numeroGuiaOrigem,'|',ans:numeroGuiaOperadora)" /> 

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

    <!-- match templates according to grouping key --> 
    <xsl:template match="ans:recursoGuia[generate-id() = generate-id(key('grpKey',concat(ans:numeroGuiaOrigem,'|',ans:numeroGuiaOperadora))[1])]"> 
     <ans:recursoGuia> 
      <!-- copy elements except <ans:opcaoRecursoGuia> --> 
      <xsl:apply-templates select="*[not(self::ans:opcaoRecursoGuia)]" /> 
      <!-- create new element <ans:opcaoRecursoGuia> --> 
      <ans:opcaoRecursoGuia> 
       <!-- copy all grouped <ans:itensGuia> elements --> 
       <xsl:apply-templates select="key('grpKey',concat(ans:numeroGuiaOrigem,'|',ans:numeroGuiaOperadora))/ans:opcaoRecursoGuia/ans:itensGuia" /> 
      </ans:opcaoRecursoGuia> 
     </ans:recursoGuia> 
    </xsl:template> 

    <!-- no processing on the remaining <ans:recursoGuia> nodes --> 
    <xsl:template match="ans:recursoGuia" /> 
</xsl:transform> 

Sortie

<ans:mensagemTISS xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_02_00.xsd"> 
    <ans:cabecalho> 
     <ans:versaoPadrao>3.02.00</ans:versaoPadrao> 
    </ans:cabecalho> 
    <ans:prestadorParaOperadora> 
     <ans:recursoGlosa> 
      <ans:guiaRecursoGlosa> 
       <ans:registroANS>005711</ans:registroANS> 
       <ans:numeroGuiaRecGlosaPrestador>431089079</ans:numeroGuiaRecGlosaPrestador> 
       <ans:opcaoRecurso> 
        <ans:recursoGuia> 
         <ans:numeroGuiaOrigem>430912301</ans:numeroGuiaOrigem> 
         <ans:numeroGuiaOperadora>24000000000605290391</ans:numeroGuiaOperadora> 
         <ans:opcaoRecursoGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-23</ans:dataInicio> 
           <ans:dataFim>2017-06-23</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>18</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
          </ans:itensGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-23</ans:dataInicio> 
           <ans:dataFim>2017-06-23</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>20</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
          </ans:itensGuia> 
         </ans:opcaoRecursoGuia> 
        </ans:recursoGuia> 
        <ans:recursoGuia> 
         <ans:numeroGuiaOrigem>430912302</ans:numeroGuiaOrigem> 
         <ans:numeroGuiaOperadora>24000000000605290392</ans:numeroGuiaOperadora> 
         <ans:opcaoRecursoGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-23</ans:dataInicio> 
           <ans:dataFim>2017-06-23</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>18</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
          </ans:itensGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-23</ans:dataInicio> 
           <ans:dataFim>2017-06-23</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>20</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
          </ans:itensGuia> 
         </ans:opcaoRecursoGuia> 
        </ans:recursoGuia> 
        <ans:recursoGuia> 
         <ans:numeroGuiaOrigem>430912303</ans:numeroGuiaOrigem> 
         <ans:numeroGuiaOperadora>24000000000605290393</ans:numeroGuiaOperadora> 
         <ans:opcaoRecursoGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-23</ans:dataInicio> 
           <ans:dataFim>2017-06-23</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>18</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
          </ans:itensGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-23</ans:dataInicio> 
           <ans:dataFim>2017-06-23</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>20</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem> com acrescimo de 38,24% contempla a remuneração pelos serviços de seleção,armazenamento,distribuição</ans:justificativaItem> 
          </ans:itensGuia> 
         </ans:opcaoRecursoGuia> 
        </ans:recursoGuia> 
        <ans:recursoGuia> 
         <ans:numeroGuiaOrigem>430912304</ans:numeroGuiaOrigem> 
         <ans:numeroGuiaOperadora>24000000000605290394</ans:numeroGuiaOperadora> 
         <ans:opcaoRecursoGuia> 
          <ans:itensGuia> 
           <ans:dataInicio>2017-06-27</ans:dataInicio> 
           <ans:dataFim>2017-06-27</ans:dataFim> 
           <ans:procRecurso> 
            <ans:codigoTabela>18</ans:codigoTabela> 
           </ans:procRecurso> 
           <ans:justificativaItem>VALOR CORRETO ATUAL -TAXA DE SALA UTILIZADA PARA PROCEDIMENTOS CONFORME ACORDO ENTRE PARTES-valor correto </ans:justificativaItem> 
          </ans:itensGuia> 
         </ans:opcaoRecursoGuia> 
        </ans:recursoGuia> 
       </ans:opcaoRecurso> 
      </ans:guiaRecursoGlosa> 
     </ans:recursoGlosa> 
    </ans:prestadorParaOperadora> 
</ans:mensagemTISS> 
+0

Merci beaucoup –