2014-06-11 3 views
0

SAX 파서 코드 DOM 문서 번호가 필요합니다.PHP의 DOM 파서 용 SAX 파서 스크립트

누구든지 나에게 똑같은 코드를 제공 할 정도로 친절하면.

function flipkart_price_fetch($sel_image){ 
    global $sel_image; 
    $price = file_get_contents("{$sel_image['flipkart_content']}"); 
    $dom = new DOMDocument(); 
    @$dom->loadHTML($price); 
    $divs = $dom->getElementsByTagName('span'); 
    foreach($divs as $div){ 
     if($div->getAttribute('class') == 'fk-font-verybig pprice fk-bold'){ 
      echo $div->nodeValue; 
      } 
     } 
    } 
+0

왜 SAX를 사용해야합니다 생각하십니까 -

여기에 별도로 파일/URL을로드 할 필요가 없다? – ThW

+0

여기에서 DOM을 사용했으며 구문 분석에 많은 시간이 걸렸습니다. 그래서 봤는데 SAX 파서가 DOM보다 더 빠르다는 것을 알았습니다. 내 웹 페이지에서 더 빨리 결과를 얻어야합니다. 대신에 무엇을 제안 하시겠습니까? –

+0

DOM + Xpath를 주로 사용합니다. XMLReader는 대용량 XML 파일이지만 DOM + Xpath는 해당 부분을 다시 나타냅니다. SAX 또는 XMLReader가 HTML을 처리 할 수 ​​있는지 확신하지 못합니다. – ThW

답변

0

나는 DOM 여기에 성능 돼지 있지만, 모든 span 요소 노드의 반복 생각하지 않습니다. DOMXpath는 Xpath 표현식을 사용하여 노드를 직접 가져올 수 있습니다.

$dom = new DOMDocument(); 
@$dom->loadHTMLFile($sel_image['flipkart_content']); 
$xpath = new DOMXpath($dom); 

// this matches the node by the class name "pprice" 
$price = $xpath->evaluate(
    'string(.//span[contains(concat(" ", normalize-space(@class), " "), " pprice ")])' 
); 

echo $price; 

Search SO 및/또는 Xpath 용 웹.

당신은 소스에 몇 가지 추가 오류가 :

  1. global $sel_image;

    $sel_image는 함수 인수, 여기 글로벌 상태를 만들 수없는 이유입니다.

  2. "{$sel_image['flipkart_content']}"

    이 문자열은 변수를 포함, 직접 $sel_image['flipkart_content']를 변수를 사용하거나 (string)$sel_image['flipkart_content']

  3. $ 가격 = file_get_contents ("{$의 sel_image [ 'flipkart_content']}"문자열로 캐스팅); 사용 DOMDocument::loadHTMLFile()

+0

의견을 보내 주셔서 감사합니다. 나는 다른 곳에서 다른 곳에서 사용했기 때문에 $ sel_image를 전역으로 만들었습니다. 오류 2와 3에 관해서는 다음을 확인합니다. :) –