2009-07-22 20 views
1

頭が痛いので、誰かが私にラインを投げることができますか?XPathの頭痛、範囲内の属性を持つノードを見つける

XMLはそうのようなものである(ない本当のものが、これは明確にするための例です):

<root> 
    <groups name="A"> 
     <entry from="1" to="10" /> 
    </groups> 
    <groups name="A"> 
     <entry from="11" to="20" /> 
     <entry from="21" to="30" /> 
    </groups> 
    <groups name="A"> 
     <entry from="31" to="40" /> 
     <entry from="41" to="50" /> 
     <entry from="51" to="60" /> 
    </groups>  
</root> 

私はこの数が間に入るエントリノードを見つけたいエントリ番号を与えられました。一致するノードが1つだけ存在する必要があります(存在する場合)。

相続人のXPath私が使用しています:

/ルート/グループ/エントリ[@from> = 45と< @to = 45] Iは、数の属性をラップ試し

()あまりにも運がない。

これは私が期待していたものを返すわけではありませんが、実際には何も返されず、なぜ私は見ることができません!私は何が欠けていますか?

編集:オープニンググループタグの誤植を修正しました...申し訳ありません。

答えて

3

この条件を満たしている要素がentryでないため、この特定の式は何も返しません。それは本当にあなたの元のXMLであれば、それは無効だから、それは動作しませんプラス

/root/groups/entry[@from <= 45 and @to >= 45] 

:まず第一に、私はそれを変更することをお勧めしたいです。 <group>オープンタグがありますが、終了タグは</groups>です。彼らは一致しません。それらをすべてgroupまたはgroupsに変更する必要があります.XPath式にはその値を反映する必要があります。

私は(groupsに変更group付き)あなたのXMLの修正版に対して、その表現をテストし、期待どおりには、1件の結果を返しました:

<entry from="41" to="50" /> 
+0

DOH!もちろん間違った比較!そんなにありがとう、それは私を1時間巻き上げていた。ああ、残念です... –

+0

'/ root/groups/entry [@from <= 45 and 45 <= @to]'とはなんですか?はっきりとIMHO。 – Tomalak

関連する問題