我一直试图在这些约束下工作,我正在使用 XSLT 1.0 {under .net}。 我希望能够做到以下几点: 我正在 xsl:for-each'ing 通过一组类型的节点
<node>
<data> unknown unstructured xml </data>
<owner></owner>
</node>
我希望能够输出
<node>
<data> unknown unstructured xml </data>
<!--RESULT of calling an XSL template with certain parameters -->
</node>
从目前的搜索来看,我认为我可以做类似 here 中的事情:
<xsl:copy>
<xsl:apply-template name="findownerdetails">
<xsl:with-param name="data" select="something" />
</xsl:apply-template>
</xsl:copy>
但这显然是无效的。有什么建议可以使它正常工作或实现类似的目标吗?恐怕我不能只调用 apply-templates 因为我想要的模板将取决于我通过节点元素列表为每个构建的一些数据。
感谢任何建议
最佳答案
这是一个典型的问题示例,最好使用并覆盖 identity rule 来解决。 :
当此转换应用于此 XML 文档时(基于提供的 XML 文档,添加了属性和所有者详细信息): 产生了想要的结果: 请注意: 身份模板以递归方式“按原样”复制文档中的每个节点。 我们只覆盖我们希望以另一种方式处理的元素的标识模板。匹配模式比身份模板更具体的任何模板都会覆盖它——XSLT 处理器总是为节点选择最具体的匹配模板。 使用和覆盖身份规则是最基本、最强大、最通用和最优雅的XSLT设计模式。它专门用于几乎所有 XSLT 转换:用于删除/重命名/修改/添加特定节点并保持所有其他节点不变。 OP 在评论中建议该解决方案不允许传递参数。这不是真的。任何模板(包括身份规则)都可以编写为具有参数——当需要时。在这种特殊情况下,不需要通过模板传递参数。 模板匹配<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="owner">
<owner-details>
<xsl:value-of select="."/>
</owner-details>
</xsl:template>
</xsl:stylesheet>
<node attr1="x" attr2="y">
<data> unknown unstructured xml </data>
<owner>
<details>
<name>John Smith </name>
<profession>XSLT programmer</profession>
</details>
</owner>
</node>
<node attr1="x" attr2="y">
<data> unknown unstructured xml </data>
<owner-details>John Smith XSLT programmer</owner-details>
</node>
owner 不需要调用另一个模板——所有所有者特定的处理都可以在这里完成。
关于xml - 修改后的 XSLT 副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436212/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与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
假设我有一个名为Product的模型,其中有一个名为brand的字段。假设brand的值以this_is_a_brand格式存储。我可以在模型(或其他任何地方)中定义一个方法,允许我在调用brand之前修改它的值吗?例如,如果我调用@product.brand,我想得到ThisisaBrand,而不是this_is_a_brand。 最佳答案 我建议使用方括号语法([]和[]=)而不是read_attribute和write_attribute。方括号语法更短并且designedtowraptheprotectedread/writ
这是一些奇怪的例子:#!/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
在尝试构建Rubygem(使用Bundler)时,我倾向于使用Bundler提供的REPL测试代码——可通过bundleconsole访问。有什么方法可以重新加载整个项目吗?我最终再次加载单个(更改的)文件以测试新更改。 最佳答案 以下hack适用于我的一个相对简单的gem和Ruby2.2.2。我很想看看它是否适合你。它做出以下假设:您具有传统的文件夹结构:一个名为lib/my_gem_name.rb的文件和一个文件夹lib/my_gem_name/,其中包含任何文件/文件夹结构。您要重新加载的所有类都嵌套在您的顶级模块MyGemN
这个问题在这里已经有了答案:Nokogiri:SelectcontentbetweenelementAandB(3个答案)关闭2年前。我正在从url中抓取文本的div,并想删除具有backtotop类的段落下方的所有内容。我在stackoverflow上看到了一段遍历代码片段,看起来很有希望,但我不知道如何将它合并,所以@el只包含第一个p.backtotop之前的所有内容分区我的代码:@doc=Nokogiri::HTML(open(url))@el=@doc.css("div")[0]end遍历片段:doc=Nokogiri::HTML(code)stop_node=doc.css