内容简介:翻译自:https://stackoverflow.com/questions/26063396/xpath-1-0-exclusive-or-node-set-expression
我需要的东西似乎与其他类似标题的文章不太匹配.
我需要使用Xpath 1,能够以该顺序依次获得节点a或节点b.
也就是说,节点a(如果存在),否则节点b.
一个xpath表达式,例如:
表达|表达
在两者都存在的情况下,我会得到两个.这不是我想要的.
我可以去:
(表达式|表达式)[last()]
事实上,我确实需要我(在我的情况下),但似乎有点低效,因为它会在选择最后一个结果之前评估表达式的两面.
我希望一旦左侧成功,一个表达将停止工作.
一个更具体的XML示例
<one>
<two>
<three>hello</three>
<four>bye</four>
</two>
<blahfive>again</blahfive>
</one>
和工作的xpath(但效率低下):
(/ one / * [starts-with(local-name(.),’blah’)] |.)[last()]
为了清楚起见,我想抓住以’blah’开头的’one’的直接子节点.但是,如果它不存在,我只想要当前节点.
如果’blah’节点确实存在,我不想要当前节点.
有没有更有效的方法来实现这一目标?
I need, using Xpath 1, to be able to get node a, or node b,
excusively, in that order. That is, node a if it exists, otherwise,
node b.
an xpath expression such as :
expression | expression
will get me both in the case they both exist. that is not what I want.
I could go:
(expression | expression)[last()]
Which does in fact gget me what I need (in my case),
这种说法不正确.
这是一个例子.让我们拥有这个XML文档:
<one> <a/> <b/> </one>
Expression1是:
/*/a
Expression2是:
/*/b
你的复合表达式:
(Expression1 | Expression2)[last()]
当我们替换上面的两个表达式时:
(/*/a | /*/b)[last()]
而这个表达式实际上选择了b – 而不是a – 因为b是文档顺序中的两个中的最后一个.
现在,这里是一个表达式,只选择它是否存在,只有当a不存在时才选择b – 无论文档顺序如何:
/*/a | /*/b[not(/*/a)]
当在上面的XML文档上评估此表达式时,它会选择a,而不管其文档顺序如何 – 尝试在a和b的位置上方的XML文档中交换以确认在两种情况下所选择的元素都是a.
总而言之,无论文档顺序如何,选择所需节点的一个表达式是:
Expression1 | Expression2[not(Expression1)]
让我们在你的案例中应用这个一般表达式:
Expression1是:
/one/*[starts-with(local-name(.), 'blah')]
Expression2是:
self::node()
想要的表达式(在上面的一般表达式中替换Expression1和Expression2之后)是:
/one/*[starts-with(local-name(.), 'blah')] | self::node()[not(/one/*[starts-with(local-name(.), 'blah')])]
翻译自:https://stackoverflow.com/questions/26063396/xpath-1-0-exclusive-or-node-set-expression
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 图解AQS系列(上)--独占锁
- 解读 JUC —— AQS 独占模式
- [译]Swift 5 强制独占性原则
- JDK并发之独占锁ReentrantLock以及Condition
- 正则表达式 – 如何使用正则表达式进行Erlang模式匹配?
- lambda表达式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ARKit for iPhone and iPad
Wallace Wang / Apress / 2018-11-5 / USD 39.99
Explore how to use ARKit to create iOS apps and learn the basics of augmented reality while diving into ARKit specific topics. This book reveals how augmented reality allows you to view the screen on ......一起来看看 《Beginning ARKit for iPhone and iPad》 这本书的介绍吧!