我在提取 DOM 中的特定元素时遇到问题。例如我使用这个代码:
xpath(DOM, //table(1), TABLE)
我可以访问第一张桌子。但是,如果我尝试访问第二个表,我会使用以下代码:
xpath(DOM, //table(2), TABLE)
但它失败了,我没有第二张桌子。
是否可以使用 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 。但是根据该文档,您的代码示例应该按预期工作。