2013-06-30 5 views
0

xpath (DOM, // table (N), T)를 사용하면 시스템은 외부 테이블 만 추출하지만 다른 테이블에 테이블이 있으면 볼 수 있습니다. 그것은 findall/3 만 사용합니다. 술어 findall/3은 모든 테이블을 추출하지만 내부 테이블에는 액세스 할 수 없습니다. 왜?핸들 테이블 xpath/3

나는 N 번째 테이블을 추출하는

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

를 사용하지만 시스템은 외부 테이블을 추출합니다. 내가 예를 들어있는 경우 : 내가 하나의 테이블이 때문에

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

내가 XPath는 (DOM, // 테이블 (N), T)를 사용할 수 없습니다. // table (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.