2017-11-17 17 views
0

xmlから値を取得するためにxpathを使用しています。xpathを使った複合条件と戻り値

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

各ドキュメントのエンティティのための2つposibilitiesがあります:(!= 0 tag1tag2 = 0)または(TAG2 = 0とTAG1場合:

ケース1は、私は特定の状況を発見しました! = 0)、ゼロ以外の値を返す必要があります。

ケース2:多分2つのフィールドが0であるI 0

UPDATE1返す必要たとえば を: I [0]第1ノードドキュメント(/ドキュメント/ docの照会と仮定)。私は150.0を取得する必要があります。 2番目のもの(/ Docs/doc [1])の場合、私は45を取得する必要があります。

xpathを使ってこれをどのように解決できますか?

+1

また、ゼロ以外の場合はどうなりますか? – splash58

+0

@ splash58私の特定の問題では起こりません –

答えて

0

私は偉大で読みやすい解決策を見つけました:

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

ケース2はどうですか? – localghost

0

あなたは、XPath組合を使用することができます(|)演算子、すべてのケースカバーするために:

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

シンプルのXPathの式:

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

XPathの結果:

150.0 
45 
関連する問題