0

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

4

1 回答 1

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 'joined' (这是最灵活的,但搜索操作员的行为需要一些学徒......)

?- xpath($D, //table, T), xpath(T, table(@id), ID).
T = element(table, [id=one], [element(table, [id=two], [])]),
ID = two ;
false.
于 2013-06-30T17:36:23.423 回答