2017-10-04 87 views
1

我需要使用xslt轉換xml,以便將所有節點與同一個「ans:opcaoRecursoGuia」節點相同的 「ans:numeroGuiaOrigem」和「ans:numeroGuiaOperadora」放入同一個節點。用xslt轉換xml到新佈局

我已經發布在源xml和所需的xml下面。

我是一個xslt的新手。我讀過一些論文,但我沒有成功進行這種轉變。

有人可以幫助我嗎?

我的XSLT是:

<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> 

//源

<?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> 

//需要

<?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> 

回答

2

這是muenchian-grouping的情況下,其可以使用本<xsl:key>用於執行實現分組。由於正在使用XSLT 1.0,因此下面的說明是根據所使用的版本。

如問題中所述,需要對<ans:numeroGuiaOrigem><ans:numeroGuiaOperadora>節點中的值進行分組。因此,複合鍵的定義如下,使用|分隔符。

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

使用此密鑰,模板匹配是爲<ans:recursoGuia>節點完成的。

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

完整的XSLT如下。

<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> 

輸出

<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

非常感謝你 –