我有以下 xslt 代码:
<xsl:template match="table_terms_and_abbr">
<informaltable frame='none' colsep='none' rowsep='none'>
<tgroup cols='2' align='left'>
<colspec colnum="1" colwidth='1*'/>
<colspec colnum="2" colwidth='1*'/>
<xsl:apply-templates/>
</tgroup>
</informaltable>
</xsl:template>
以及它正在处理的以下 xml:
<table_terms_and_abbr>
<tblrow_hdr>Name ,, Description</tblrow_hdr>
<tbody>
<tblrow_bold_first> BOT ,, &j_bot;</tblrow_bold_first>
...
</tbody>
</table_terms_and_abbr>
现在我想通过在 table_terms_and_abbr 中移动以下行来改进 xslt:
<tblrow_hdr>Name ,, Description</tblrow_hdr>
<tbody>
</tbody>
所以我会有类似的东西:
<xsl:template match="table_terms_and_abbr">
<informaltable frame='none' colsep='none' rowsep='none'>
<tgroup cols='2' align='left'>
<colspec colnum="1" colwidth='1*'/>
<colspec colnum="2" colwidth='1*'/>
<xsl:call-template name="tblrow_hdr">
BOT ,, &j_bot; * ???? *
</xsl:call-template>
<tbody>
<xsl:apply-templates/>
</tbody>
</tgroup>
</informaltable>
</xsl:template>
标有 * 的行 ????? * 不起作用。我在 linux 平台上使用 saxon9(xslt 2.0 样式表)并得到这个错误:
XTSE0010:xsl:call-template 中不允许有任何字符数据
我知道如何将属性传递给模板,即:
<xsl:with-param name="is_make_first_bold" select = "1" as="xs:integer"/>
但是如何传递自由文本呢?
想法是将所有静态数据移至模板,而在 xml 中仅使用可变数据,即
<table_terms_and_abbr>
<tblrow_bold_first> BOT ,, &j_bot;</tblrow_bold_first>
...
</table_terms_and_abbr>
更多信息
我的要求是创建一个简化的语法来为我们的 DocBook 文档定义可重复的表。为此,我创建了一个通用命名模板 tblrow,它将以“,,”分隔的行拆分为分隔实体,并在表行中创建条目列表。
每个条目可以是一个简单的字符串、一个实体或另一个模板。
由于参数编号未定义(表格可以有不同数量的单元格),我不能为模板使用标准参数并使用分隔字符串。如果我想让其中一个表条目包含指向文档中某个位置的链接,我将无法再次使用这些参数,因为我无法将外部参照模板作为参数传递。
不更改 tblrow 模板的主要原因是它可以正常工作 :) 并且有点复杂。我花了很长时间才实现这一点,但我并不完全理解它是如何工作的:)。
除此之外,我还有一些变量可以控制显示的输出,例如 tblrow_hdr,它会为每个条目中的文本加下划线和加粗。由于 tblrow_hdr 对于所有 table_terms_and_abbr 表都是通用的,所以对我来说这听起来很合乎逻辑,而不是在 xml 中调用 tblrow_hdr 在 table_terms_and_abbr 模板,我就卡在这里了。
最佳答案
I know how to pass the attributes to the template i.e:
<xsl:with-param name="is_make_first_bold" select = "1" as="xs:integer"/>but how to pass free text ?
将文本作为 xsl:with-param 元素的内容传递。
XSL Transformations 11.6 Passing Parameters to Templates
<xsl:with-param
name = qname
select = expression>
<!-- Content: template -->
</xsl:with-param>
使用 xsl:with-param 元素将参数传递给模板。必需的 name 属性指定参数的名称(要替换其绑定(bind)值的变量)。 name 属性的值为 QName ,如 [2.4 Qualified Names] 中所述进行扩展. xsl:call-template 和 xsl:apply-templates 中都允许使用 'xsl:with-param'。参数值的指定方式与 xsl:variable 和 xsl:param 相同。用于计算 xsl:with-param 元素指定值的当前节点和当前节点列表与用于 xsl:apply-templates 或 xsl:call-template 出现的元素。将参数 x 传递给没有用于 x 的 xsl:param 元素的模板不是错误;该参数将被忽略。
此示例为带有控制数字格式的参数的编号 block 定义命名模板。
<xsl:template name="numbered-block">
<xsl:param name="format">1. </xsl:param>
<fo:block>
<xsl:number format="{$format}"/>
<xsl:apply-templates/>
</fo:block>
<xsl:template match="ol//ol/li">
<xsl:call-template name="numbered-block">
<xsl:with-param name="format">a. </xsl:with-param>
</xsl:call-template>
</xsl:template>
关于xml - xslt模板优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/299106/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h
所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP
一般来说,我是Middleman和ruby的新手。我已经安装了Ruby我已经安装了Middleman和gem以使其运行。我需要使用slim而不是默认的模板系统。所以我安装了Slimgem。Slim的网站只说我需要'slim'才能让它工作。中间人网站说我只需要在config.rb文件中添加模板引擎,但是没有给出例子...对于没有ruby背景的人来说,这没有帮助。我在git上找了几个config.rb,它们都有:require'slim'和#Setslim-langoutputstyleSlim::Engine.set_default_options:pretty=>true#Se
我想禁用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
这是一些奇怪的例子:#!/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::
我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att
我有一个偏爱:如何将像o.office这样的值插入到属性中?value="#{o.office}"无效。 最佳答案 'type='text'/>或者你可以使用表单助手 关于ruby-on-rails-如何将变量值插入ERB模板中的HTML标签?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6172174/