XSLT:子节点的唯一名称
XSLT: Distinct names of child nodes
<mensagens>
<mensagem maquina="M02" timestamp="2020-05-22T15:28:50+0000">
<inicioAtividade>
<contexto>
<tipo>OP</tipo>
<descricao>12345</descricao>
</contexto>
</inicioAtividade>
</mensagem>
<mensagem maquina="M03" timestamp="2020-05-22T15:29:46-0400">
<fimAtividade>
<contexto>
<tipo>OP</tipo>
<descricao>12345</descricao>
</contexto>
</fimAtividade>
</mensagem>
<mensagem maquina="M03" timestamp="2020-05-22T15:29:46-0400">
<paragemForcada>
<causa id="fdbs"/>
</paragemForcada>
</mensagem>
<mensagem maquina="M02" timestamp="2020-05-22T18:28:46-0400">
<consumo>
<materiaPrima id="PC3025"/>
<quantidade>200</quantidade>
<origem>
<maquina id="M01"/>
</origem>
</consumo>
</mensagem>
<mensagem maquina="M01" timestamp="2020-05-23T15:28:46-0400">
<producao>
<produto id="PC3025"/>
<quantidade>10</quantidade>
</producao>
</mensagem>
<mensagem maquina="M03" timestamp="2020-06-22T15:28:46-0400">
<entregaProducao>
<quantidade>10</quantidade>
<produto id="RC1.3"/>
<deposito id="DEP1"/>
</entregaProducao>
</mensagem>
<mensagem maquina="M01" timestamp="2020-05-31T15:28:46-0400">
<estorno>
<quantidade>10</quantidade>
<materiaPrima id="RC1.2"/>
<deposito id="DEP1"/>
</estorno>
</mensagem>
</mensagens>
我正在尝试获取 'mensagem' 的所有子节点的名称。
输出将是:inicioAtividade、fimAtividade、paragemForcada 等
我已经知道如何获取 mensagem 的子项名称,但我无法获取每个不同的名称
我的模板从 mensagens 开始
我怎么能得到这样的东西?
只需使用这个 XSLT 表达式:
<xsl:value-of select="distinct-values(mensagem/*/name())" separator=", " />
它的输出是
inicioAtividade, fimAtividade, paragemForcada, consumo, producao, entregaProducao, estorno
要计算不同名称的每次出现次数,您可以使用此模板:
<xsl:template match="/mensagens">
<xsl:for-each-group select="mensagem/*" group-by="name()">
<xsl:value-of select="concat(count(current-group()),' - ',current-grouping-key())" />
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
它的输出是
1 - inicioAtividade
1 - fimAtividade
1 - paragemForcada
1 - consumo
1 - producao
1 - entregaProducao
1 - estorno
<mensagens>
<mensagem maquina="M02" timestamp="2020-05-22T15:28:50+0000">
<inicioAtividade>
<contexto>
<tipo>OP</tipo>
<descricao>12345</descricao>
</contexto>
</inicioAtividade>
</mensagem>
<mensagem maquina="M03" timestamp="2020-05-22T15:29:46-0400">
<fimAtividade>
<contexto>
<tipo>OP</tipo>
<descricao>12345</descricao>
</contexto>
</fimAtividade>
</mensagem>
<mensagem maquina="M03" timestamp="2020-05-22T15:29:46-0400">
<paragemForcada>
<causa id="fdbs"/>
</paragemForcada>
</mensagem>
<mensagem maquina="M02" timestamp="2020-05-22T18:28:46-0400">
<consumo>
<materiaPrima id="PC3025"/>
<quantidade>200</quantidade>
<origem>
<maquina id="M01"/>
</origem>
</consumo>
</mensagem>
<mensagem maquina="M01" timestamp="2020-05-23T15:28:46-0400">
<producao>
<produto id="PC3025"/>
<quantidade>10</quantidade>
</producao>
</mensagem>
<mensagem maquina="M03" timestamp="2020-06-22T15:28:46-0400">
<entregaProducao>
<quantidade>10</quantidade>
<produto id="RC1.3"/>
<deposito id="DEP1"/>
</entregaProducao>
</mensagem>
<mensagem maquina="M01" timestamp="2020-05-31T15:28:46-0400">
<estorno>
<quantidade>10</quantidade>
<materiaPrima id="RC1.2"/>
<deposito id="DEP1"/>
</estorno>
</mensagem>
</mensagens>
我正在尝试获取 'mensagem' 的所有子节点的名称。
输出将是:inicioAtividade、fimAtividade、paragemForcada 等
我已经知道如何获取 mensagem 的子项名称,但我无法获取每个不同的名称
我的模板从 mensagens 开始
我怎么能得到这样的东西?
只需使用这个 XSLT 表达式:
<xsl:value-of select="distinct-values(mensagem/*/name())" separator=", " />
它的输出是
inicioAtividade, fimAtividade, paragemForcada, consumo, producao, entregaProducao, estorno
要计算不同名称的每次出现次数,您可以使用此模板:
<xsl:template match="/mensagens">
<xsl:for-each-group select="mensagem/*" group-by="name()">
<xsl:value-of select="concat(count(current-group()),' - ',current-grouping-key())" />
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
它的输出是
1 - inicioAtividade
1 - fimAtividade
1 - paragemForcada
1 - consumo
1 - producao
1 - entregaProducao
1 - estorno