我注意到如果我使用xpath(DOM,// table(N),T),系统只提取外部表,但如果我有一个表到另一个表,我只能看到它使用findall / 3。谓词findall / 3提取所有表,但我无法访问内部表。为什么呢?
我用
xpath(DOM, //table(N), T)
提取第N个表,但系统只提取外部表。如果我有例如:
<table>
<table>
</table>
<table>
我不能使用xpath(DOM,// table(N),T),因为我只有一个表。如果我插入// table(2),系统将失败。相反,如果我使用findall / 3我在DOM中拥有所有表,但是使用findall我无法访问第n个表。我该怎么办?
答案 0 :(得分:1)
索引在“级别”上工作,访问可以指定路径的嵌套元素,或者 - 如果路径只是部分已知 - 使用多个xpath调用。
测试数据(方式太简单)
?- D=element(table,[id=one],[element(table,[id=two],[])]).
原始搜索运算符索引:
?- xpath($D, //table(N), T).
N = last,
T = element(table, [id=one], [element(table, [id=two], [])]) ;
N = last,
T = element(table, [id=two], []) ;
false.
完全已知的路径
?- xpath($D, //table/table(@id), ID).
ID = two ;
false.
多个xpath'加入'(这是最灵活的,但搜索运营商的行为需要一些学徒......)
?- xpath($D, //table, T), xpath(T, table(@id), ID).
T = element(table, [id=one], [element(table, [id=two], [])]),
ID = two ;
false.