2017-02-13 4 views
1

を選択:私は次のサンプルXMLのためにBの中のすべてのCさんを選択したいすべての最初の子供たちに

<A> 
    <B> 
    <C>want this</C> 
    <C>don't want this</C> 
    </B> 
    <B> 
    <C>want this, too</C> 
    <C>still don't want this</C> 
    </B> 
<C>definitely don't want this, or any other c</C> 
</A> 

これが可能であるどのように?私は//B/C[1]を試しましたが、最初の要素だけを返しました。サンプルのXMLでは、CはBの外にCを置いています。なぜなら、Cは本当に他の場所にも存在する可能性のある共通の要素だからです。

編集:もしxpathがBからすべての2番目の子どもを得ることができるような方法で拡張することができればいいと思います。

+0

{// B/C [position()= 1] 'を試してください。 – Andersson

+0

@Andersson:これは' // B/C [1] 'と変わりません。 – kjhughes

+0

@kjhughes、両方ともうまくいくはずです:) – Andersson

答えて

1

あなたが試したと言うXPathは、

//B/C[1] 

はあなたがB要素の全ての第1 Cの要素を選択したい正確に何である:他のC要素のいずれかなし

<C>want this</C> 
<C>want this, too</C> 

上記のようにCの両方の要素が表示されない場合は、表示される前に最初の結果のみがフィルタリングされます。おそらく、自動的にノードセットの最初のノードを取る別の関数に渡しているでしょう。

+0

私の疑惑を確認していただきありがとうございます。あなたがAppiumに慣れているなら、なぜこれがうまくいかないのか分かりますか? – econoMichael

+0

私はAppiumを使ったことはありませんでしたが、 '/ B/C [1]'と結果セットの最初のノードのみを返す可能性がある間にある関数を探す必要があります。例えば、XPath 1.0では、 'string(// B/C [1])'は '' this want ''だけを返します。 – kjhughes

+0

チップをありがとう。確かめます。 – econoMichael

関連する問題