使用xpath的复杂条件和返回值

时间:2017-11-17 13:24:24

标签: xml xpath

我使用xpath来从xml获取值。我发现了一个特殊的情况:

<Docs>
    <Doc>
       <tag1>0</tag1>
       <tag2>150.0</tag2>
    </Doc>
    <Doc>
       <tag1>45</tag1>
       <tag2>0</tag2>
    </Doc>
</Docs>

每个Doc实体有两个可能性:

案例1: if(tag1 = 0且tag2!= 0)或(tag2 = 0且tag1!= 0),我需要返回非 - 零价值。

案例2:也许这两个字段是0.我需要返回0

UPDATE1: 例如: 假设我查询第一个节点Doc(/ Docs / doc [0])。我需要150.0。对于第二个(/ Docs / doc [1]),我需要得到45。

如何使用xpath解决这个问题?

3 个答案:

答案 0 :(得分:1)

简单 xpath 表达式:

//Doc/*[text() != '0']/text()

XPath结果:

150.0
45

答案 1 :(得分:0)

您可以使用xpath union(|)运算符,以涵盖所有情况:

Docs/Doc[tag1=0]/tag2[.!=0]/text() | 
Docs/Doc[tag2=0]/tag1[.!=0]/text() | 
Docs/Doc[tag1=0 and tag2=0]/tag1/text()

答案 2 :(得分:0)

我找到了一个很棒且可读的解决方案:

Docs/Doc/*[starts-with(name(), 'tag') and .!=0][1]/text()