我需要使用xslt转换xml,以便将所有节点都放在一起 “ans:numeroGuiaOrigem”和“ans:numeroGuiaOperadora”进入相同的“ans:opcaoRecursoGuia”节点。
我已经在源xml和所需的xml下面发布了。
我是xslt的新手。我已经阅读了一些论文,但我没有成功进行这种转变。
有人可以帮助我吗?
我的xslt是:
[HttpGet("{id:int}")]
public string GetById(int id)
{
return id.ToString();
}
[HttpGet("{name}")]
public string GetByName(string name)
{
return name + " name";
}
//源
<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>
答案 0 :(得分: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>