2014-04-16 1 views
0

여기 내 HTML 파일에 날짜와 <span> 태그의 링크가 포함되어 있습니다. 누구나 특정 날짜의 링크를 찾을 수 있도록 도와 줄 수 있습니까? 특정 날짜의보기 링크 나 특정 날짜에 대한 링크를 검색 할html dom 파서가 스팬 sibiling에서 href를 추출합니다.

<table> 
<tbody> 
<tr class="c0"> 
<td class="c11"> 
<td class="c8"> 
<ul class="c2 lst-kix_h6z8amo254ry-0 start"> 
<li class="c1"> 
<span>1st Apr 2014 - </span> 
<span class="c6"><a class="c4" href="/link.html">View</a> 
</span> 
</li> 
</ul> 
</td> 
</tr> 
</td> 
</table> 

내 코드는 '본

include('simple_html_dom.php');  
$html = file_get_html('link.html'); 
//store the links in array 
foreach($html->find('span') as $value) 
{ 
    //echo $value->plaintext . '<br />'; 
    $date = $value->plaintext; 

    if (strpos($date,$compare_text)) { 
     //$linkeachday = $value->find('span[class=c1]')->href; 
     //$day_url[] = $value->href; 
     //$day_url = Array("text" => $value->plaintext); 
     $day_url = Array("text" => $date, "link" =>$linkeachday); 
     //echo $value->next_sibling (a); 
    } 
} 

또는

$spans = $html->find('table',0)->find('li')->find('span'); 
echo $spans; 
$num = null; 
foreach($spans as $span){ 
    if($span->plaintext == $compare_text){ 
     $next_span = $span->next_sibling(); 
     $num = $next_span->plaintext; 
     echo($num);  
     break; 
    } 
} 
echo($num); 
+1

당신이있는 DOMDocument 클래스를 시도해 봤어 : 경기를 테스트 할 수는 preg_match? –

+0

와우, * simplehtmldom *은 2008 년 이후로 출시되지 않았습니다. 전염병처럼 피해야합니다. 자세한 내용은이 답변의 주석을 참조하십시오. http://stackoverflow.com/a/3577662/283366 – Phil

+0

@phil - 어디에서 볼 수 있습니까? 마지막 업데이트는 2012 년 12 월 – pguardiario

답변

0

를 들어 당신은

나는 그들이 검색 텍스트가있는 경우 다음 테스트, 기본적으로 모든 경간을 얻는 다음을 얻기 위해 그것을 약간 수정 ... 당신의 마지막 예제와 옳은 길이었다 이 경우 그래서, 그들의 다음 형제의 내용을 표시하는 경우 및 (코드 주석에 확인) :

$input = <<<_DATA_ 
    <table> 
     <tbody> 
      <tr class="c0"> 
       <td class="c11"> 
        <td class="c8"> 
         <ul class="c2 lst-kix_h6z8amo254ry-0 start"> 
          <li class="c1"> 
           <span>1st Apr 2013 - </span> 
           <span>1st Apr 2014 - </span> 
           <span class="c6"> 
            <a class="c4" href="/link.html">View</a> 
           </span> 
           <span>1st Apr 2015 - </span> 
          </li> 
         </ul> 
        </td> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
_DATA_; 

// Create a DOM object 
$html = new simple_html_dom(); 
// Load HTML from a string 
$html->load($input); 

// Searched value 
$searchDate = '1st Apr 2014'; 

// Find all the spans direct childs of li, which is a descendent of table 
$spans = $html->find('table li > span'); 

// Loop through all the spans 
foreach ($spans as $span) { 
    // If the span starts with the searched text && has a following sibling 
    if (strpos($span->plaintext, $searchDate) === 0 && $sibling = $span->next_sibling()) { 
     // Then, print it's text content 
     echo $sibling->plaintext; // or ->innertext for raw content 
     // And stop (if only one result is needed) 
     break; 
    } 
} 

OUTPUT

다음

$pattern = sprintf('~^\s*%s~i', preg_quote($searchDate, '~')); 

그리고 사용 문자열 비교를 위해

, 당신은 또한 (최선의 경우) 정규식을 사용할 수 있습니다 ...

그래서 위의 코드에서, 당신은 당신의 패턴을 구축하기 위해 추가

if (preg_match($pattern, $span->plaintext) && $sibling = $span->next_sibling()) { 
+0

때로는'/'이외의 것을 preg delimeter로 사용하는 것이 좋습니다. 그러나 이유가 있어야합니다. 그렇지 않으면 당신의 정규식은 지저분 해 아무것도 찾지 못합니다. – pguardiario

+0

'영숫자가 아니며 백 슬래시가 아닌 공백이 아닌 문자는 구분 기호로 사용할 수 있습니다. '패턴 안에 나타날 때 이스케이프해야합니다 ... 더 나은 lisibility를 위해서 간단히 char를 선택하는 것이 좋습니다 그건 당신의 패턴에 나타나지 않습니다 ... 그리고 그것은'/'가 가장 좋아하는/가장 많이 사용되는 것, 그것입니다! 따라서이 경우에는'~'를 사용할 이유가 없지만'/'를 사용하는 것은 아무 것도 없습니다. – Enissay

+0

'/'대신'~'를 사용하면 일반적으로 읽기 쉽지 않습니다. 물론 좋은 이유가 없다면. – pguardiario

0

나는 돈과 같다는 알 방법은 간단한 HTML DOM하지만 PHP DOM 라이브러리 만 있으면 충분합니다.

는 쉽게 XPath 식을 사용하여 해당 링크를 찾을 수 있습니다

$date = '1st Apr 2014'; 

...이 같은 문자열에 날짜를 말한다. 예를

$doc = new DOMDocument(); 
$doc->loadHTMLFile('link.html'); 

$xp = new DOMXpath($doc); 
$query = sprintf('//span[starts-with(., "%s")]/following-sibling::span/a', $date); 

$links = $xp->query($query); 
if ($links->length) { 
    $href = $links->item(0)->getAttribute('href'); 
} 
+0

xpath는 XML에 적합하지만 CSS에서는 html에 대해 훨씬 우수합니다. – pguardiario

+0

@pguardiario 당신이 무슨 뜻인지 전혀 모르겠군요. XPath는 모든 DOM 문서 (HTML 포함)와 관련이 있습니다. CSS 스타일 선택기도 요소 내용에 일치하는 방법이 없습니다 – Phil

+0

흠, 나는 그것이 * 관련성이 있다고 동의 할 수 있습니다 ... – pguardiario

0
include('simple_html_dom.php'); 

    $html = file_get_html('link.html'); 
     $compare_text = "1st Apr 2013"; 


     $tds = $html->find('table',1)->find('span'); 

     $num = 0; 
     foreach($tds as $td){ 

     if (strpos($td->plaintext, $compare_text) !== false){ 

       $next_td = $td->next_sibling(); 
        foreach($next_td->find('a') as $elm) { 
        $num = $elm->href; 
        } 
      //$day_url = array($day => array(daylink => $day, text => $td->plaintext, link => $num)); 
echo $td->plaintext. "<br />"; 
echo $num . "<br />"; 
      } 

     } 
+0

compare_text $가 배열이고 내용이 여러 날짜 인 경우 echo 출력 요소를 주석 문과 같은 새로운 다차원 배열에 저장할 수 있습니다 ..... ..... 아무도 나를 도와 줄 수있는이 ????????? – Lipsa