2010-02-26 7 views
0

각 테이블 앞에 텍스트가있는 div 태그가있는 경우 HTML 앞에 15 개의 태그 태그가 있다고 가정 해 보겠습니다. div 태그에서 HTML 마크 업의 10 번째 테이블 태그 바로 앞에있는 텍스트를 가져와야합니다. 내가 어떻게 그럴 수 있니?PHP DOM N 번째 테이블 전에 태그 가져 오기

내가 생각할 수있는 유일한 방법은 HTML을 부품으로 분할하고 일반 표현식을 사용하여 분해 된 배열의 9 번째 값에서 explode ('< table', $ html)를 사용하여 마지막 div 태그를 얻는 것입니다. 더 좋은 방법이 있습니까?

나는 PHP DOM documentation을 통해 읽고 있지만이 작업에 도움이되는 방법은 없습니다.

+0

하나님의 사랑을 위해, regex 태그를 제거하십시오. * 실제로 * 정규식 솔루션을 제공하는 사람을 만들 수 있습니다! – Tomalak

+0

좋습니다. 고맙습니다. :-) – Tomalak

답변

2

당신 load your HTML into a DOMDocument이 XPath 식으로 쿼리를 :

//table[10]/preceding-sibling::div[1] 

이 다음 레이아웃을 위해 일 것이다 :

<div>Some text.</div> 
<table><!-- #1 --></table> 
    <!-- ...nine more... --> 
<div>Some other text.</div> <!-- this would be selected --> 
<table><!-- #10 --></table> 
    <!-- ...four more... --> 

의 XPath는 쉽게 정말 복잡한 노드 조회를 수행 할 수 있습니다. 위의 표현이 아직 작동하지 않는다면, 원하는대로 할 수있는 것은 거의 없습니다.

HTML은 문자열로 표시된 구조화 된 데이터로, 문자열과는 실질적으로 다른 것입니다. explode()이나 정규 표현식과 같은 문자열 처리 함수로 이런 일을하는 유혹에 굴복하지 마십시오.

1

당신이 XPath를 배우는 기분하지 않으면 브라우저에서 자바 스크립트 사용하는 것과 같은 구식 DOM 보행 기술을 사용할 수 있습니다. 당신이 TextNode하지 않고 PHP의 DOMDocument를 다음이 아닌 완전한 HTML과 함께 꽤 잘 작동하는지 내가 찾아낸 div

입니다 하나를 찾을 때까지

document.getElementsByTagName('table')[9] 

다음 .previousSibling 값을 당신의 방법을 기어 일단 DOM을 사용하면 원본 HTML/XHTML 구조가 완벽하지는 않지만 SimpleXML 객체에 XML을 전달할 수 있다고 생각합니다.

관련 문제