我正在尝试通过查询 xml 文档来创建一个 html 表。我正在使用 xslt。
问题来了。 “父”节点包含许多“子”节点。我必须 o/p 一个表,其中包含按排序顺序(降序)的父节点的@name 和“子”节点的计数。所以我在做
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="parent[count(child) > 3]">
<html>
<table border="1">
<xsl:for-each select=".">
<xsl:sort select="{count(child)}" data-type="number" order="descending"/>
<tr>
<td><b><xsl:value-of select="@name" /></b></td>
<td><xsl:value-of select="count(child)" /></td>
</tr>
</xsl:for-each>
</table>
</html>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
我得到了 html,但唯一的问题是我没有按照子元素的数量排序。我怀疑我使用的计数不正确 xsl:sort?你能帮忙吗?
输入xml
<outer>
<parent name="abc" attr1="22664136" attr2="647500">
<child percentage="11">aaa</child>
<child percentage="35">bbb</child>
<child percentage="50">ccc</child>
</parent>
<parent name="ggg" attr1="3249136" attr2="28750"/>
<parent name="ghi" attr1="29183032" attr2="2381740">
<child2>
<name>ppp</name>
<attr1>1507241</attr1>
</child2>
</parent>
<parent name="qwe" attr1="10342899" attr2="1246700"/>
<parent name="lkj" attr1="65647" attr2="440">
<child percentage="100">jjj</child>
</parent>
</outer>
最佳答案
提供的 XSLT 代码中有很多错误!
最大的问题在这里:
<xsl:for-each select="."> <xsl:sort select="{count(child)}" data-type="number" order="descending"/> <tr> <td><b><xsl:value-of select="@name" /></b></td> <td><xsl:value-of select="count(child)" /></td> </tr> </xsl:for-each>
这不会执行任何有意义的排序,因为要排序的节点的节点集只包含一个节点——当前节点。
下一个问题在这里:
<xsl:sort select="{count(child)}" data-type="number" order="descending"/>
XSLT 指令的任何 select 属性中不应有任何 AVT——您需要删除大括号。
第三个问题是排序指定得太晚了——在模板数学运算 parent 中。 父级没有自己有 child child 。
解决方案:纠正上面讨论的所有主要问题,可能会得到以下代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/*">
<html>
<table border="1">
<xsl:for-each select="parent">
<xsl:sort select="count(child)" data-type="number" order="descending"/>
<tr>
<td>
<b>
<xsl:value-of select="@name" />
</b>
</td>
<td>
<xsl:value-of select="count(child)" />
</td>
</tr>
</xsl:for-each>
</table>
</html>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时:
<outer>
<parent name="abc" attr1="22664136" attr2="647500">
<child percentage="11">aaa</child>
<child percentage="35">bbb</child>
<child percentage="50">ccc</child>
</parent>
<parent name="ggg" attr1="3249136" attr2="28750"/>
<parent name="ghi" attr1="29183032" attr2="2381740">
<child2>
<name>ppp</name>
<attr1>1507241</attr1>
</child2>
</parent>
<parent name="qwe" attr1="10342899" attr2="1246700"/>
<parent name="lkj" attr1="65647" attr2="440">
<child percentage="100">jjj</child>
</parent>
</outer>
产生了想要的排序结果:
<html>
<table border="1">
<tr>
<td><b>abc</b></td>
<td>3</td>
</tr>
<tr>
<td><b>lkj</b></td>
<td>1</td>
</tr>
<tr>
<td><b>ggg</b></td>
<td>0</td>
</tr>
<tr>
<td><b>ghi</b></td>
<td>0</td>
</tr>
<tr>
<td><b>qwe</b></td>
<td>0</td>
</tr>
</table>
</html>
关于xml - xslt 按子元素计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199560/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排
我有一个数组:array=['Footballs','Baseball','football','Soccer']而且我需要计算看到Football或Baseball的次数,无论大小写和复数形式如何。这是我尝试做的,但没有成功:array.count{|x|x.downcase.include?'football'||x.downcase.include?'baseball'}编写这段代码的正确或更好的方法是什么?我正在寻找3作为答案。 最佳答案 我会将count与一个block结合使用,该block根据与您正在寻找的约束相匹配的正
例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果
我有一个对象如下:[{:id=>2,:fname=>"Ron",:lname=>"XXXXX",:photo=>"XXX"},{:id=>3,:fname=>"Dain",:lname=>"XXXX",:photo=>"XXXXXXX"},{:id=>1,:fname=>"Bob",:lname=>"XXXXXX",:photo=>"XXXX"}]我想按fname排序,不区分大小写,所以它会导致编号:1,3,2我该如何排序?我正在尝试:@people.sort!{|x,y|y[:fname]x[:fname]}但这没有任何效果。 最佳答案
有人可以告诉我如何根据自定义字符串对嵌套数组进行排序吗?比如有没有办法排序:[['Red','Blue'],['Green','Orange'],['Purple','Yellow']]“橙色”、“黄色”,然后是“蓝色”?最终结果如下所示:[['Green','Orange'],['Purple','Yellow'],['Red','Blue']]它不是按字母顺序排序的。我很想知道我是否可以定义要排序的值以实现上述目标。 最佳答案 sort_by对于这种排序总是非常方便:a=[['Red','Blue'],['Green','Ora