DOM で特定の要素を抽出するのに問題があります。たとえば、私はこのコードを使用します:
xpath(DOM, //table(1), TABLE)
私は最初のテーブルにアクセスできます。しかし、2 番目のテーブルにアクセスしようとすると、次のコードを使用します。
xpath(DOM, //table(2), TABLE)
しかし、それは失敗し、2 番目のテーブルがありません。
xpath/3 を使用して DOM 内の特定のノードを選択することは可能ですか?
同じ変数を再利用していると思いますが、それは機能しません:
:- [library(xpath)].
table(N, T) :-
DOM = element(xx, [],
[ element(table, [], [a,b,c]),
element(table, [], [x,y,z])
]),
xpath(DOM, //table(N), T).
予想通り、そのフラグメントで
?- table(2,T).
T = element(table, [], [x, y, z])
しかし
?- table(1,T), table(2,T).
false.
xpath の選択 (または述語) は、[] ブラケットに埋め込まれます。例えば
//table[1]
//table[2]
//table[last()-1]
//table[@someattribute='somevalue']
等
編集:プロローグタグを見逃したようです。プロローグでは、xpath述語は角括弧ではなく括弧で指定されているようです: http://www.swi-prolog.org/pldoc/man?predicate=xpath%2F3。しかし、そのドキュメントによると、コード サンプルは意図したとおりに動作するはずです。