2012-11-07 2 views
1

나는 간단한 HTML DOM을 오랫동안 사용 해왔고, 내가 할 수있는 것을 사랑했습니다. 그러나 나는 내가하고 싶은 무언가로 벽돌 벽에 뛰어 들었다. html로이PHP 간단한 HTML DOM - 페이지 이동하기

<html> 
<div><div><table><tr><td class="alt2"> texty texty </td></tr></table></div></div> 
Text text 
<div><div><table><tr><td class="alt2"> texty2 texty2 </td></tr></table></div></div> 
Text2 text2 
<div><div><table><tr><td class="alt2"> texty3 texty3 </td></tr></table></div></div> 
Text2 text3 
</html> 

모습의 기본적인 아이디어를 제공하는 첫 번째는 그래서 basicly 나는 그 TD의 굵은 글씨로 뭐죠 가지고, 다음이 각각 그 아래에 div에 뭐죠 아래 배치해야합니다.

그래서 $ text = $ html-> find ('td [class = alt2]')를 사용하면 "texty texty"를 얻을 수 있지만 "text text"를 that after,

texty2 texty2를 잡으면 어떻게 text2 텍스트 2를 연결하나요? 결국


, 내가 목표로 한 출력은 일의 <p>texty texty</p><br>text text 친절했다

나는 div의가에 differnt 클래스를 가질 수 등, 간단 등록 표현이 작동 wouldnt가 (그리고 싶은 것을 지적해야 간단한 HTML DOM 가능한 경우)을 고수하는

-

UPDATE :

나는이 조금의이 만든 코드

if ($html) { 


// Pulls the div that holds the links to the champion profiles (where they have the english names) 
$text = $html->find('td[class="alt2"]'); 
$count = 0; 
foreach ($text as $holder) { 

    $tdholder[] = $holder->innertext; 
    $html->find('div',$count*2)->innertext = $holder->innertext; 
    echo $holder."<br><br>"; 
    $count++; 
} 
} 

이 코드의 유일한 문제는 div의 총 수입니다. 이것은 2가 있기 때문에 내 예제에서는 괜찮습니다.하지만 2 ~ 3이 있으면 문제가됩니다. 이제 첫 번째 또는 두 번째 또는 세 번째 최상위 div를 잡는 방법을 알아야합니다. 그러면 좋을 것입니다.

+0

하나의 솔루션으로 메신저 생각은 화장실이다 한번씩 핑 (ping)을하여 TD의 내용물을 가져 와서 다시 반복하면서 첫 번째 최상위 div를 첫 번째 TD의 내용으로 바꾸라고 말하면서 변경하십시오 ... 지금 작업 할 것입니다 – user1807658

+0

'텍스트 텍스트' , Text2 text2' 및'Text2 text3'은 요청을 모호하게 만드는 html 태그에 없습니다. – Baba

+0

@Baba thats thats issue. 그들이 태그에 있다면, 배열을 통해 그들을 일치시킬 수 있습니다. – user1807658

답변

0

Text text, Text2 text2Text2 text3는 아래의 솔루션은 위의 더 나은 구현을 위해 원래의 HTML을 추가 그것은 단지 HTML의 예를 들어 일하는 것이 but it is code specific를 작동합니다

모호한 요청을 만드는 모든 HTML 태그에없는

$list = array(); 
foreach ($html->find('text') as $td) { 
    $list[] = $td->plaintext; 
} 

echo "<pre>"; 
foreach (array_chunk(array_filter(array_map("trim", $list)), 2) as $info) { 
    vprintf("TD: %s,\tTXT: %s \n", $info); 
} 
기다리는 동안의

출력

TD: texty texty, TXT: Text text 
TD: texty2 texty2, TXT: Text2 text2 
TD: texty3 texty3, TXT: Text2 text3 
+0

나는 작동 할 무언가를 프로그램했다. 유일한 문제는 테이블 당 단지 2divs에서만 작동한다는 것이다.첫 번째 최상위 div와 두 번째 div (두 번째 div가 아닌)를 가져와 코드가 작동하는 이유를 찾아야합니다. if ($ html) { \t 은 // (그들은 영어 이름이) 챔피언 프로파일에 대한 링크를 보유하고 사업부를 했었어요 $ 텍스트 = $, HTML> ('TD [클래스 = "ALT2를"]') 찾을; $를 = 0 카운트; 의 foreach ($ 보유자 $ 텍스트) { \t \t $ [] tdholder를 = $ holder-> innerText와; \t $, HTML> 찾기 ('DIV'$ 개수 * 2) -> innerText와 = $ holder-> innertext; \t echo $ holder. "

"; \t $ count ++; } }' – user1807658

+0

블라인드 작업을하고 있습니다. 첫 번째 태그는'html' 다음에'div'가 있습니다 .... 제공된 정보로 수행 할 수있는 일이 많지 않습니다. – Baba

+0

정보가 모두 실제로 존재합니다. 텍스트 등은 동적입니다. 하지만 레이아웃은 항상 2 개 이상의 div 안에 alt2 클래스가있는 TD가 될 것이고, 그 아래에 (태그가없는) 텍스트가 나옵니다. 거기에 쓴 코드 (또한 첫 번째 게시물로 업데이트 됨)가 문제를 해결합니다. 그러나 항상 2 개의 div가있을 때만 문제를 해결합니다. 그러나 이것은 단지 TOP 수준 div 만 배열을 가져 오는 방법을 파악할 수 있으면 해결할 수 있습니다. – user1807658

관련 문제