2013-06-30 51 views
0

我注意到如果我使用xpath(DOM,// table(N),T),系統只提取外部表,但是如果我有一張表放入另一個表中,我可以看到它只有我使用findall/3。謂詞findall/3提取所有表,但我無法訪問內部表。爲什麼?Handle table xpath/3

我使用

xpath(DOM, //table(N), T) 

提取第N表,但該系統僅提取外部表。如果我舉例:

<table> 
    <table> 
    </table> 
<table> 

我不能使用xpath(DOM,// table(N),T),因爲我只有一個表。如果我插入//表(2),則系統失敗。相反,如果我使用findall/3我有DOM中的所有表,但與findall我沒有訪問第n表。我能怎麼做?

回答

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.