当我使用以下代码var_dump
时,我可以使用xpath提取必要的信息。当我尝试添加一个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"
}
答案 0 :(得分:0)
$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.
答案 1 :(得分:0)
而不是:
$rss = $xml->xpath("/html/body//a[@class='highzoom1']");
使用强>:
$hrefs = $xml->xpath("/html/body//a[@class='highzoom1']/@href");
您正在使用的原始XPath表达式(上面的第一个)选择XML文档中的任何a
元素,其class
属性的值为'highzoom1'
且{{1}元素)是a
的后代,它是XML文档中顶部元素(名为body
)的子元素。
但是,您要选择这些html
元素的href
属性,而不是a
元素本身。
上面的第二个XPath表达式恰好选择了这些a
元素的href
属性。