2012-12-12 6 views
0

저는 PHP를 처음 사용하고 있으며 웹에서 근근이 살아가는 데 사용하는 수업을 복제하려고합니다. 나는 페이지 등을 다운로드하기위한 표준 Http Helper 클래스를 만들었지 만 모든 것을 출력하는 루프를 포함하지 않는 간단한 예제를 찾을 수 없으므로 요소 잡는 것에 대한 조언을 구한다.PHP로 웹 사이트 요소 데이터를 수집하는 방법

는 여기에 내가 모든 것을 통해 반복하고 싶지 해달라고 또는 위의 요소의 배열의 항목 순서를 추측 시작

foreach ($nodes as $element) { 
     if($element->hasAttribute('class') && $element->getAttribute('class') == "itemgroup"){ 

      $tempMessage = $element->getElementsByTagName('h3')->item(0)->nodeValue. "\n"; 

입니다. DOM을 쿼리와 같은

: 내가 속성과 값으로 단일 요소를 얻어서 값을 할당 할 수 있도록하려는 "//div[@id='travel-itemlist']/div[@class='itemgroup']"

: 예 : 난 그냥 약간의 혼합을 할 수 있도록하려는의 정상적인 예 :

$title = 'Title: ' . $e->getElementsByTagName('p')->item('class[@id='thatstheOne'')->nodeValue. "\n"; 

이 가능합니까?

답변

0

간단히 말해서, 당신은 1 줄 에서처럼 그렇게 할 수 없습니다.

DOMXPath::queryDOMElement::getElementsByTagName은 둘 다 빈 목록이 될 수있는 DOMNodeList 개체를 반환합니다. 당신은 하나 개의 결과를 예상 할 때

는 DOM에 정말 정확한 일치를 들어, 내가 XPath 식을 사용하는 것, 예를 들어, 다음 XPath는 함수의 반환 값을 테스트하고 그에 따라 변수를 할당합니다

$items = $xpath->query("//div[@id='travel-itemlist']/div[@class='itemgroup']"); 
$title = ($items->length === 1) ? $items->item(0)->nodeValue : ''; 

여기 Ternary Operators을 사용하면 코드를 짧게 유지하고 if-then-else 스프를 피할 수 있습니다.

0

PHP Nokogiri을 살펴보십시오. jQuery 스타일로 DOM을 쿼리 할 수 ​​있지만 원하는 경우 직접 xPath 쿼리를 사용할 수 있습니다. 이 사용하면

$topicLinks = $saw->get('#sidebar dl.air-comment a.topic')->toArray() 

과 같은 작업을 수행 할 수 있습니다 쉽게 단일 값을 반환하는 클래스를 확장 할 수 있습니다.

관련 문제