如果这是一个非常简单的问题,请道歉;我不使用XSLT,并且在网络上找不到太多建议,因为搜索结果有很多污染!XSLT;在文档中查找最常见的元素值
我有以下形式的XML文档。其主要目的是通过XSLT以几种方式重新格式化,以便以多种不同格式显示。
<desk>
<drawer>
<contents>pencils</contents>
<quantity>2</quantity>
</drawer>
<drawer>
<contents>pens</contents>
<quantity>15</quantity>
</drawer>
<drawer>
<contents>pencils</contents>
<quantity>3</quantity>
</drawer>
<drawer>
<contents>rulers</contents>
<quantity>2</quantity>
</drawer>
</desk>
我想从xml中提取两条信息:i)平均数量; ii)xml中出现次数最多的内容(即“铅笔”,因为它出现的次数最多,所以出现的次数是两次而不是“笔”)。这个想法是,这可以被传送到一个非常简单的shell脚本中。因此,我认为获取这些信息的最简单方法是编写几个简短的xsl样式表,然后使用xsltproc来获取数据。
第一条信息看起来很简单。样式表的核心将是这条线:
<xsl:value-of select="(sum(drawer/quantity)) div (count(drawer))" />
但我有点卡住了第二。
我想我可以通过每一个人内容的列表,使用这样的循环:
<xsl:for-each select="drawer[not(contents = preceding-sibling::drawer/contents)]" />
,但我不太清楚如何再以数具有$ current_contents和元素的数量其内容元素的值。我也看不到通过结果进行排序的简单方法,因此我可以获得最常遇到的内容值的名称。
我有一种感觉,这在XSLT 2.0中有各种分组选项,但不幸的是,xsltproc似乎并不支持这一点。任何帮助将受到感谢。
非常感谢,
雅各
谢谢;这很有帮助。我无法解决怎么做,虽然是“无论你需要什么”一点。通过“内容”对XML进行分组是否有一种简单的方法来计算特定“内容”值在xml中出现的次数? – 2009-06-02 11:43:19
对不起,请参阅更新 – annakata 2009-06-02 12:18:51