- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 XPath 表达式中使用 Iverson 括号(即映射 true => 1,false => 0)。
示例:而不是书写
someNumber+(if(elem1/elem2[@attr='123'])then(1)else(0)))*someOtherNumber
我想写(但不知何故没有“艾弗森”)
someNumber+Iverson(elem1/elem2[@attr='123'])*someOtherNumber
以下方法不起作用:
someNumber+[elem1/elem2[@attr='123']]*someOtherNumber
转换为 bool 值:
someNumber+boolean(elem1/elem2[@attr='123'])*someOtherNumber
是否有比“if(...)then(1)else(0)”或“boolean(...)”更简单的语法?
最佳答案
有趣的是,在 XPath 中您已经使用了 Iverson bracket syntax 的一个版本带有 [@attr='123']
或 [@attr]
中的谓词,如果 EBV 为 true,则返回 true。但如果它计算结果为数字,它将返回序列中的第 n 项。
为了方便讨论,为了简洁起见,我们将表达式 elem1/elem2[@attr='123']
替换为 EXPR
,其余部分如下:
X + EXPR * Y
其想法是尽可能接近 EXPR 的 Iverson 语法。
您的表达式需要更少的括号:
X + if(EXPR) then 1 else 0 * Y
这也可以写成如下,假设EXPR
的假值是一个空序列:
X + (EXPR, 1, 0)[2] * Y
Is there a more simple syntax than "boolean(...)"?
您建议使用 boolean(EXPR)
函数,但正如您在评论中提到的,这不起作用,您需要将其转换为数字,例如:
X + number(boolean(EXPR)) * Y
我认为 XPath 2.0 中最短的版本是空序列消除方法,但它可能并不总是有效,它需要第一项返回空序列。
如果您有一个将元素设置为 bool 值的验证处理器,您可以使用:
X + number(EXPR) * Y
或者,如果输入有效值为 0 和 1 的数字,则:
EXPR
让我们看看使用新的 XPath 3.0 语法是否可以变得更简单:
let $Iv := function($i) { number(boolean($i)) }
return X + $Iv(EXPR) * Y
使用 XQuery 和 XSLT,还有 XPath,您可以全局声明此变量,这会将表达式更改为:
X + $Yv(EXPR) * Y
但是您仍然需要处理括号,但请继续阅读...
在 3.1 中,arrow operator has been introduced ,这使得您的原始示例可以写为:
X + EXPR=>boolean()=>number() * Y
鉴于我们现在有一个带有函数项的全局变量,我们可以这样做:
X + EXPR=>$Iv() * Y
既然给匿名函数设置一个全局变量无非就是创建一个函数,所以我们也可以在XQuery或者XSLT中声明一个函数。像这样的东西:
X + EXPR=>i:v() * Y
关于xpath - XPath 中艾弗森括号最简单的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32502220/
在此处回答的另一个问题中,我发现了以下 JavaScript代码: function _dom_trackActiveElement(evt) { if (evt && evt.target)
if (A == 0) OR (B == 0) 怎么说? 最佳答案 只是为了讽刺: if (A === 0 || B === 0) 关于语法,我们在Stack Overflow上找到一个类似的问题:
var ret = [] ,xresult = document.evaluate(exp, rootEl, null, X
我一直在寻找一些类似于下例的 JavaScript。有人可以解释一下吗,因为我以前从未见过这样编写的 JavaScript。 “SomethingHere”和冒号代表什么?我习惯于看到函数 myFun
这是我的程序: delimiter // drop procedure if exists migContactToActor; create procedure migContactToActor(
我遇到了一个问题。我一直在使用 gcc 编译/汇编我的 C 代码一段时间,并且习惯了阅读 Intel 汇编语法。我在生成程序集文件时使用了 -masm=intel 标志。 但是最近因为公司迁移,拿到了
自上而下和自下而上语法有什么区别?举个例子就太好了。 最佳答案 首先,语法本身不是自上而下或自下而上的,解析器是(尽管有些语法可以被其中一个解析,但不能被另一个解析)。 从实践的角度来看,主要区别在于
我知道这是草率的代码,但它是: display dialog ("Start Screensaver. Please type: matrix, coffee, waffles, star, wate
这个问题已经有答案了: Giving name to a loop (6 个回答) 已关闭 8 年前。 我见过这个字符在 C# 中使用,就像 Java 中的扩展一样,但最近我在代码中发现了这个 loo
我正在尝试编写一个函数来检查字符串是否为回文,但我认为在使用字符串指针时存在一些错误。这段代码有什么问题? #include #include #define MAX 1000 int IsPalin
所以在this question我询问了一些 Javascript 是如何被压缩的。问题已得到解答,但以下片段让我非常困惑,以至于我不得不问另一个问题。在这里: for (Y = 0; $ = 'zx
假设我有一个接受这些参数的函数。 int create(Ptr * p,void * (*insert)(void *, void *)) { //return something later } 结
这个问题已经有答案了: Bitwise '&' operator (6 个回答) 已关闭 5 年前。 我在代码中找到了这个,但我从未遇到过像 & 这样的事情,仅 && if ((code & 1) =
我在处理继承类及其中的构造函数和方法的语法时遇到了问题。 我想实现一个类日期和一个子类 date_ISO,它们将按特定顺序设置给定的日、月、年,并通过一种方法将其写入字符串。我觉得我的基类日期工作正常
我正在尝试通过存储过程填充表,如下所示: SET @resultsCount = (SELECT COUNT(*) FROM tableA); SET @i = 0; WHILE @i THEN
谁能解释一下下面代码中的“<<”? mysql test<
刚刚开始学习 MySQL,这是一个菜鸟问题,也是我在 StackOverflow 上的第一个问题。 假设我有 12 个订单状态,我想从其中的 5 个中选择总计。我会使用: SELECT SUM(tot
我的编程背景是在学校学过一点Java。由于某些原因,JavaScript 语法往往让我感到困惑。下面的 JavaScript 代码是一种我不知道如何构成的语法模式: foo.ready = funct
我正在阅读 javascript 源代码,并且我以前没有编写过 javascript。我对它的一些语法感到困惑。 $(function () { window.onload=function
我什至不知道如何命名我想要的东西。那么让我举个例子来解释一下。 虽然火狐使用textContent,但其他浏览器支持innerText属性。顺便说一句,如果我使用了错误的术语,请纠正我。无论如何,到目
我是一名优秀的程序员,十分优秀!