我想复制所有 XML,但属性值包含特定字符的地方除外,在本例中为 .。在 . 存在的地方,删除具有该属性的元素及其所有子元素。我是 xslt 的新手,读过一些书,但我似乎无法找到一种方法来获取父项及其所有子项。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="descendant-or-self::root/*/@name[contains(., '.')]" />
<?xml version="1.0" encoding="UTF-8"?>
<root>
<complexType name="tableData2File">
<complexContent>
<extension base="taskElement">
<sequence>
<element name="source" type="tableData2File.source" />
<element name="parser" type="parser" />
<element name="target" type="node.uri" />
</sequence>
<attribute name="addNewColumns" type="minlength" use="optional" />
</extension>
</complexContent>
</complexType>
<!--
match idViolationsCount.test,
then remove all its content
-->
<complexType name="idViolationsCount.test">
<complexContent>
<extension base="tableTask">
<sequence>
<element name="index" type="columnsNoAs" minOccurs="1" />
<element name="condition" type="stringWithRef" minOccurs="0" />
<element name="allowExpressions" type="boolWithRef" minOccurs="0" />
</sequence>
<attribute name="mode" type="mergeMode" use="required" />
</extension>
</complexContent>
</complexType>
</root>
<root>
<complexType name="tableData2File">
<complexContent>
<extension base="taskElement">
<sequence>
<element name="source" type="tableData2File.source" />
<element name="parser" type="parser" />
<element name="target" type="node.uri" />
</sequence>
<attribute name="addNewColumns" type="minlength" use="optional" />
</extension>
</complexContent>
</complexType>
<!-- no idViolationsCount.test! -->
</root>
最佳答案
这看起来是正确的方法(身份模板,覆盖您要删除的内容),但您不能在匹配模式中使用 descendant-or-self::。然而,你不需要,只是
<xsl:template match="root/*[contains(@name, '.')]" />
应该做的工作。请注意,您的 root/*/@name[contains(., '.')] 的原始匹配模式将匹配 name 属性节点,而不是承载它的元素, 所以你最终会删除属性但保持元素完好无损。
您不需要对已删除元素的子元素做任何特殊操作 - 这个空模板将删除整个元素,包括它的内容,如果您只想删除这个元素但保留它的子元素,那么您需要一个不同的模板
<xsl:template match="root/*[contains(@name, '.')]">
<!-- don't output anything now, but keep processing children -->
<xsl:apply-templates />
</xsl:template>
关于xml - XSLT:复制所有 XML,但属性包含值的地方除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304486/
我试图获取一个长度在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代码修改为
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs