xml - 如何通过 xslt 在 xml 文件中按名称计算节点?

标签 xml xslt

我是 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('&lt;',name(),'> ', count(key('kElemByName',name())),'&#xA;')"/>
  <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/

相关文章:

javascript - 如何计算xsl中每个的使用次数

xml - 合并两个由 Heat 生成的 .wxs 文件

xslt - 如何计算xsl中相同的紧邻兄弟的数量

javascript - 在 javascript 中设置时,svg 文本实体会被转义

xml - 使用 XPath 选择一个节点,其子节点包含特定的内部文本

python - Xerces + Python?

java - 如何使用xsl中的参数:apply-templates which are set from java?

xml - 优化 XSLT 中的递归

php 计算 xml 元素

javascript - 如何为特定节点编写条件 xpath 选择?