草庐IT

xml - xslt编程时 'or'和 '|'有什么区别?

coder 2024-06-28 原文

我最近一直在使用 xslt,我一直无法理解 | 之间的区别。和或以及我什么时候应该使用哪个。我知道我可以只使用错误消息来确定我需要使用哪一个,但我有兴趣了解为什么我不能使用一个或另一个。

谁能帮我指出正确的方向,让我可以了解其中的区别?

最佳答案

| 关注的是节点,or 关注的是“真”,即 bool 值。

解释

|union 运算符

此运算符返回两个序列的并集,在本例中,这两个序列被解释为两组节点。一个有趣的细节是联合运算符会删除任何重复的节点。此外,它只接受 node()* 类型的操作数,即节点序列。节点按文档顺序返回。

or 运算符

此运算符的技术术语是 bool 析取。它有两个参数,这两个参数都必须分别计算为 bool 值(“true”或“false”)。或者,更准确地说, 的操作数通过将它们转换为 xs:boolean 来判断它们的有效 bool 值。顺便说一下,所有这些也适用于 运算符。

例子

使用 union 运算符扩大一组节点,通常在模板匹配中:

<xsl:template match="Root|Jon">

为什么不在这里使用操作符呢?因为 match 属性需要一组节点作为它的值。 union 返回一组节点,而 or 运算符返回 bool 值。您不能为 bool 值定义模板匹配。


在XSLT代码中使用or操作符实现alternatives,主要使用xsl:ifxsl:choose:

<xsl:if test="$var lt 354 or $var gt 5647">

如果此 操作的两个操作数中的任何一个计算为 true,则 xsl:if 的内容也将被计算.但不仅像“小于”(lt) 这样的比较具有 bool 值,下面的比较也是完全合法的:

<xsl:if test="$var1 or $var2">

如果两个变量中至少有一个是非空序列,则以上表达式的计算结果仅为 true。这是因为空序列被定义为具有 false 的有效 bool 值。


强制

请注意,由于 XSLT 将事物强制转换为适当类型的方式,因此在某些情况下可以使用任一运算符。考虑这两个条件:

<xsl:if test="Root | Jon"> ... <xsl:if>

<xsl:if test="Root or Jon"> ... <xsl:if>

第一个条件测试名为 Root 的子集和名为 Jon 的子集的并集是否非空。表达式 Root | Jon 返回一个节点序列,然后该序列被强制转换为一个 bool 值,因为 if 需要一个 bool 值;如果序列非空,则有效 bool 值为真。

第二个条件测试两组 child (名为 Root 的 child 和名为 Jon 的 child )中的任何一个是否为非空。表达式 Root or Jon 返回一个 bool 值,并且由于运算符 or 需要 bool 参数,所以这两个集合都被强制转换为 bool 值,然后 or 运算符被应用。

结果是相同的,但是(如您所见)这两个表达式以略有不同的方式达到该结果。

关于xml - xslt编程时 'or'和 '|'有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407504/

有关xml - xslt编程时 'or'和 '|'有什么区别?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  5. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  6. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  7. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  8. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  9. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  10. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

随机推荐