处理表xpath / 3

时间:2013-06-30 11:32:31

标签: prolog

我注意到如果我使用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个表。我该怎么办?

1 个答案:

答案 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.