xpath中的if语句如何工作?

时间:2014-09-08 10:01:31

标签: xml xpath-2.0

如果我们有一个xpath if语句:

  if(test-expression) then (expresion) else (someOtherExpression),

我们说test-expression是一个具有某些条件的路径(例如// Element1 [text()!='']) 我们有多个Element1节点,if语句是否进入每个Element1节点并检查条件或仅检查条件?

示例:

<Element1></Element1>
<Element1>Test</Element1>

如果声明:

 if(//Element1[text()!='']) then ('result1') else ('result2')

这会返回第一个元素的result2,然后去检查第二个元素和return1,或者这不是xpath的工作原理吗?

我是xpath的新手,我无法在任何地方找到这些信息。

1 个答案:

答案 0 :(得分:1)

  

这会返回第一个元素的result2,然后去检查第二个元素和return1,或者这不是xpath的工作原理吗?

不,它将评估测试表达式,将其转换为布尔值,然后如果测试为真,则返回result1,如果为false,则返回result2

对于这个具体的例子

//Element1[text()!='']

是一个表达式,它将返回所有Element1个节点的序列,这些节点至少有一个非空的文本节点子节点 - 它会找到<Element1>Test</Element1><Element1>Te<br/>st</Element1>,但< em> not <Element1><span>Test</span></Element1>因为Element1根本没有任何文本节点子节点,只有一个元素节点(span)。如果您想要抓住最后一个示例,那么您可以使用. != ''代替text() != ''

The rule to convert a sequence of nodes to boolean是空序列为假,非空序列为真。因此整体表达

if(//Element1[text()!='']) then ('result1') else ('result2')
如果文档中至少有一个result1元素具有非空文本节点子元素,

将返回Element1,否则将返回result2


如果您想依次测试每个Element1并为每个节点返回result1 / result2序列,那么您需要{{1表达式

for