我是一个初学者,我正在尝试使用 XSLT 1.0 对基于类似类别的 XML 输入进行分组。这是包含类别和位置的输入 xml。输出必须将所有具有相同类别的元素分组并列出唯一位置:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <Data> <Row> <id>123</id> <location>/example/games/data.php</location> <category>gamedata</category> </Row> <Row> <id>456</id> <location>/example/games/data.php</location> <category>gamedata</category> </Row> <Row> <id>789</id> <location>/example/games/score.php</location> <category>gamedata</category> </Row> <Row> <id>888</id> <location>/example/games/title.php</location> <category>gametitle</category> </Row> <Row> <id>777</id> <location>/example/games/title.php</location> <category>gametitle</category> </Row> <Row> <id>999</id> <location>/example/score/title.php</location> <category>gametitle</category> </Row> </Data> |
寻找输出(仅列出按类别分组的唯一位置):
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <item> <data> <category>gamedata</category> <id>456</id> <id>789</id> <id>123</id> <location>/example/games/data.php</location> <location>/example/games/score.php</location> </data> <data> <category>gametitle</category> <id>888</id> <id>777</id> <id>999</id> <location>/example/games/title.php</location> <location>/example/score/title.php</location> </data> </item></project> |
到目前为止我尝试过的:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="keyCategory" match="Row" use="category"/> <xsl:template match="/"> <project xmlns="xyz.com"> <item > <name lang="en">Example</name> <xsl:for-each select="//Row[generate-id(.) = generate-id(key('keyCategory', category)[1])]"> <xsl:for-each select="key('keyCategory', category)"> <data> <category><xsl:value-of select="category"/></category> <id><xsl:value-of select="id"/></id> <location><xsl:value-of select="location"/></location></data> </xsl:for-each> </xsl:for-each> </item> </project> |
我实际上得到了什么:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <item> <data> <category>gamedata</category> <id>456</id> <location>/example/games/data.php</location> </data> <data> <category>gamedata</category> <id>789</id> <location>/example/games/score.php</location> </data> <data> <category>gamedata</category> <id>789</id> <location>/example/games/score.php</location> </data> <data> <category>gamedata</category> <id>123</id> <location>/example/games/data.php</location> </data> <data> <category>gametitle</category> <id>888</id> <location>/example/games/title.php</location> </data> <data> <category>gametitle</category> <id>777</id> <location>/example/games/title.php</location> </data> <data> <category>gametitle</category> <id>999</id> <location>/example/score/title.php</location> </data> </item></project> |
对于您的嵌套分组问题,我认为您想使用第二个键:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <xsl:output indent="yes"/> <xsl:key name="keyCategory" match="Row" use="category"/> <xsl:key name="location" match="Row" use="concat(category, '|', location)"/> <xsl:template match="/"> <project> <item> <name lang="en">Example</name> <xsl:for-each select="//Row[generate-id(.) = generate-id(key('keyCategory', category)[1])]"> <data> <xsl:copy-of select="category"/> <xsl:copy-of select="key('keyCategory', category)/id"/> <xsl:copy-of select="key('keyCategory', category)[generate-id() = generate-id(key('location', concat(category, '|', location))[1])]/location"/> </data> </xsl:for-each> </item> </project> </xsl:template> </xsl:stylesheet> |
https://xsltfiddle.liberty-development.net/94Acsm4/0
这仅显示分组并忽略您的输出使用不同的命名空间,为了在新命名空间中创建所选元素,我将对其进行转换:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://example.com/"> <xsl:output indent="yes"/> <xsl:key name="keyCategory" match="Row" use="category"/> <xsl:key name="location" match="Row" use="concat(category, '|', location)"/> <xsl:template match="/"> <project> <item> <name lang="en">Example</name> <xsl:for-each select="//Row[generate-id(.) = generate-id(key('keyCategory', category)[1])]"> <data> <xsl:apply-templates select="category"/> <xsl:apply-templates select="key('keyCategory', category)/id"/> <xsl:apply-templates select="key('keyCategory', category)[generate-id() = generate-id(key('location', concat(category, '|', location))[1])]/location"/> </data> </xsl:for-each> </item> </project> </xsl:template> <xsl:template match="*"> <xsl:element name="{local-name()}"> <xsl:apply-templates/> </xsl:element> </xsl:template> </xsl:stylesheet> |
https://xsltfiddle.liberty-development.net/94Acsm4/1
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
假设我有一个在Ruby中看起来像这样的哈希:{:ie0=>"Hi",:ex0=>"Hey",:eg0=>"Howdy",:ie1=>"Hello",:ex1=>"Greetings",:eg1=>"Goodday"}有什么好的方法可以将它变成如下内容:{"0"=>{"ie"=>"Hi","ex"=>"Hey","eg"=>"Howdy"},"1"=>{"ie"=>"Hello","ex"=>"Greetings","eg"=>"Goodday"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解
我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm