我有一个这样的xml,
<doc>
<para>texttext<page>1</page>texttext<page>1</page>texttext</para>
<para>texttext<page>1</page><page>2</page>texttext</para>
<para>texttext<page>1</page><page>2</page><page>3</page>texttext<page>4</page><page>5</page><page>6</page>texttext</para>
<para>texttext<page>1</page><page>2</page><page>3</page><page>4</page>texttext</para>
</doc>
我需要转换 <page>节点到 <link>使用 xsl 转换并需要考虑以下规则,
<page>节点出现(未跟随任何页面节点)它只是转换为 <link> <page>连续放置的节点(上面示例中的场景 2)必须在输出 <link> 之间添加 ','节点<page>连续放置的节点(上例中的场景3和4),只需添加以'-'分隔的页面节点的第一个和最后一个内容所以,输出应该是这样的,
<doc>
<para>texttext<link>1</link>texttext<link>1</link>texttext</para>
<para>texttext<link>1</link>,<link>2</link>texttext</para>
<para>texttext<link>1</link>-<link>3</link>texttext<link>4</link>-<link>6</link>texttext</para>
<para>texttext<link>1</link>-<link>4</link>texttext</para>
</doc>
我写了下面的 xsl 来完成这个任务,
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="page">
<link>
<xsl:apply-templates/>
</link>
</xsl:template>
<xsl:template match="page[following-sibling::node()[1][self::page]]">
<link>
<xsl:apply-templates/>
</link>
<xsl:text>,</xsl:text>
<link>
<xsl:apply-templates select="following-sibling::*[1]"/>
</link>
</xsl:template>
<xsl:template match="page[following-sibling::node()[1][self::page]][following-sibling::node()[2][self::page]]">
<link>
<xsl:apply-templates/>
</link>
<xsl:text>-</xsl:text>
<link>
<xsl:apply-templates select="following-sibling::*[2]"/>
</link>
</xsl:template>
但是这个方法并没有起作用,因为当有 3 个连续的 <page> 时,它会添加 ','节点出现,如果有更多 <page>节点连续出现这种方法效率不高。
任何人都可以在 xslt 中建议一个好的方法来分析以下 sibling 形成 xslt 并完成此任务..
最佳答案
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="page[not(preceding-sibling::node()[1][self::page])]">
<xsl:variable name="pages" select="following-sibling::page[
preceding-sibling::node()[1][self::page]
and generate-id(current()) = generate-id(preceding-sibling::page[
not(preceding-sibling::node()[1][self::page])
][1])
]" />
<xsl:apply-templates select="." mode="link" />
<xsl:if test="count($pages) = 1">,</xsl:if>
<xsl:if test="count($pages) > 1">-</xsl:if>
<xsl:apply-templates select="$pages[last()]" mode="link" />
</xsl:template>
<xsl:template match="page" />
<xsl:template match="page" mode="link">
<link>
<xsl:apply-templates select="@*|node()"/>
</link>
</xsl:template>
</xsl:transform>
结果
<doc>
<para>texttext<link>1</link>texttext<link>1</link>texttext</para>
<para>texttext<link>1</link>,<link>2</link>texttext</para>
<para>texttext<link>1</link>-<link>3</link>texttext<link>4</link>-<link>6</link>texttext</para>
<para>texttext<link>1</link>-<link>4</link>texttext</para>
</doc>
这里,
<xsl:template match="page[not(preceding-sibling::node()[1][self::page])]">
匹配任何<page>开始一个“范围”的连续页面。
选择连续范围的剩余页面有点棘手,但可以这样做:
<page> 之前(即 “范围的一部分”)和 <page>它本身不直接在另一个 <page> 之前(即 “最近的 <page> 开始一个范围”)与当前节点相同。 假设我们只处理 <page>在此模板中开始一个范围的节点,这相当于“是当前范围的一部分”。
在 XPath 术语中,如上所示:
following-sibling::page[
preceding-sibling::node()[1][self::page]
and generate-id(current()) = generate-id(preceding-sibling::page[
not(preceding-sibling::node()[1][self::page])
][1])
]
关于xml - XSLT - 分析以下连续节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273607/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(
当您在Ruby脚本中使用系统调用时,您可以像这样获得该命令的输出:output=`ls`putsoutput这就是thisquestion是关于。但是有没有办法显示系统调用的连续输出?例如,如果您运行此安全复制命令,以通过SSH从服务器获取文件:scpuser@someserver:remoteFile/some/local/folder/...它显示随着下载进度的连续输出。但是这个:output=`scpuser@someserver:remoteFile/some/local/folder/`putsoutput...不捕获该输出。如何从我的Ruby脚本中显示正在进行的下载进度?
我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::
我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi
下面有没有更优雅的方法来实现这个:输入:array=[1,1,1,0,0,1,1,1,1,0]输出:4我的算法:streak=0max_streak=0arr.eachdo|n|ifn==1streak+=1elsemax_streak=streakifstreak>max_streakstreak=0endendputsmax_streak 最佳答案 类似于w0lf'sanswer,但通过从chunk返回nil来跳过元素:array.chunk{|x|x==1||nil}.map{|_,x|x.size}.max
我有一个整数数组m。我正在寻找一种方法来检查m的元素是否连续。有没有办法测试连续数字?我想出了这段代码,旨在在数组长度为四时工作:m.count==4&&(m.max-m.min)==3对于[1,1,1,4]或[0,0,0,3]错误地返回true。 最佳答案 Enumerable有一个非常方便的方法叫做each_cons是这样工作的:[1,2,3,4].each_cons(2).to_a#=>[[1,2],[2,3],[3,4]]也就是说,它会生成每组连续的n元素。在我们的例子中,n是2。当然,顾名思义,它返回一个Enumerato
这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::
目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标