我是 xsl 的新手。我有以下 xml:
<record>
<fruit>Apples</fruit>
<fruit>Oranges</fruit>
<fruit>Bananas</fruit>
<fruit>Plums</fruit>
<vegetable>Carrots</vegetable>
<vegetable>Peas</vegetable>
<candy>Snickers</candy>
我想使用 key 函数并有一个输出文件:
<record> 1
--<fruit> 4
--<vegetable> 2
--<candy> 1
有什么解决办法吗?
最佳答案
就这么简单:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kElemByName" match="*" use="name()"/>
<xsl:template match=
"*[not(generate-id()=generate-id(key('kElemByName',name())[1]))]"/>
<xsl:template match="*">
<xsl:value-of select=
"concat('<',name(),'> ', count(key('kElemByName',name())),'
')"/>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时:
<record>
<fruit>Apples</fruit>
<fruit>Oranges</fruit>
<fruit>Bananas</fruit>
<fruit>Plums</fruit>
<vegetable>Carrots</vegetable>
<vegetable>Peas</vegetable>
<candy>Snickers</candy>
</record>
产生了想要的、正确的结果:
<record> 1
<fruit> 4
<vegetable> 2
<candy> 1
关于xml - 如何通过 xslt 在 xml 文件中按名称计算节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14290079/