1

我在提取 DOM 中的特定元素时遇到问题。例如我使用这个代码:

   xpath(DOM, //table(1), TABLE)

我可以访问第一张桌子。但是,如果我尝试访问第二个表,我会使用以下代码:

   xpath(DOM, //table(2), TABLE)

但它失败了,我没有第二张桌子。

是否可以使用 xpath/3 在 DOM 中选择特定节点?

4

2 回答 2

2

我猜你正在重用相同的变量,这是行不通的:

:- [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.
于 2013-06-28T13:31:54.483 回答
0

xpath 中的选择(或谓词)嵌入在 [] 括号中。例如

//table[1]
//table[2]
//table[last()-1]
//table[@someattribute='somevalue']

等等


编辑:看来我错过了序言标签。在序言中,xpath 谓词似乎不是由方括号指定,而是由括号指定:http ://www.swi-prolog.org/pldoc/man?predicate=xpath%2F3 。但是根据该文档,您的代码示例应该按预期工作。

于 2013-06-28T12:57:25.690 回答