2017-10-04 3 views
1

동일한 "012 : ans : numeroGuiaOrigem"및 "ans : numeroGuiaOperadora"를 가진 모든 노드를 동일한 "ans : opcaoRecursoGuia"노드에 넣으려면 xslt를 사용하여 XML을 변환해야합니다.xslt를 사용하여 xslt를 새 레이아웃으로 변환

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

이것은 수행하는 <xsl:key> 사용하여 달성 될 수 muenchian-grouping의 경우이다

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

필요 // 그룹화. 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

당신에게 대단히 감사합니다 –