xpath не возвращает значения - PullRequest
1 голос
/ 01 июня 2011

Я могу получить необходимую информацию, используя xpath, когда я использую var_dump, используя следующий код. Когда я пытаюсь добавить цикл foreach, чтобы вернуть все ["href"] значения, я получаю пустую страницу, есть идеи, где я облажался?

$dom = new DOMDocument();
@$dom->loadHTML($source);
$xml = simplexml_import_dom($dom);
$rss = $xml->xpath("/html/body//a[@class='highzoom1']");

$links = $rss->href;

foreach ($links as $link){ 
    echo $link; 
    }

Вот массив информации.

array(96) {
  [0]=>
  object(SimpleXMLElement)#3 (2) {
    ["@attributes"]=>
    array(2) {
      ["href"]=>
      string(49) "/p/18351/test1.html"
      ["class"]=>
      string(10) "highzoom1"
    }
    [0]=>
    string(36) ""test1"
  }
  [1]=>
  object(SimpleXMLElement)#4 (2) {
    ["@attributes"]=>
    array(2) {
      ["href"]=>
      string(43) "/p/18351/test2.html"
      ["class"]=>
      string(10) "highzoom1"
    }
    [0]=>
    string(30) ""test2"
  }
  [2]=>
  object(SimpleXMLElement)#5 (2) {
    ["@attributes"]=>
    array(2) {
      ["href"]=>
      string(48) "/p/18351/test3.html"
      ["class"]=>
      string(10) "highzoom1"
    }
    [0]=>
    string(35) ""test3"
  }

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Вместо :

$rss = $xml->xpath("/html/body//a[@class='highzoom1']");

использование

$hrefs = $xml->xpath("/html/body//a[@class='highzoom1']/@href");

Исходное выражение XPath (первое выше), которое вы используете, выбирает любой элемент a в XML-документе, значение атрибута которого class равно 'highzoom1' и что (элемент a) является потомком body, который является дочерним элементом верхнего элемента (с именем html) в документе XML.

Однако вы хотите выбрать атрибуты href этих элементов a, а не сами элементы a.

Второе выражение XPath выше выбирает именно href атрибуты этих a элементов .

0 голосов
/ 01 июня 2011
$links = $rss->href;

никогда не будет работать, так как $ rss является объектом DOMNodeList и не имеет атрибута href. Вместо этого вы хотели бы сделать это:

$rss = $xml->xpath("/html/body//a[@class='highzoom1']");

foreach($rss as $link) {
    echo $link->href;
}

Или вы можете напрямую обращаться к $ rss в виде массива:

echo $rss[5]->href; // echo out the href of the 6th link found.
...