XPATH / PHP - 实现这一目标的更聪明的方法?

时间:2012-12-13 17:52:08

标签: php xpath html-content-extraction

我有以下内容:

$html = "<a href="/path/to/page.html" title="Page name"><img src="path/to/image.jpg" alt="Alt name"  />Page name</a>" 

我需要提取href和src属性以及锚文本

我的解决方案:

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) { 
    $href = $node->getAttribute('href');
    $title = $node->nodeValue;
}
foreach ($dom->getElementsByTagName('img') as $node) { 
    $img = $node->getAttribute('src');
}

更聪明的方法是什么?

3 个答案:

答案 0 :(得分:1)

如果使用DOMXPath直接获取元素,则可以避免循环:

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath( $dom);

$a = $xpath->query( '//a')->item( 0);         // Get the first <a> node
$img = $xpath->query( '//img', $a)->item( 0); // Get the <img> child of that <a>

现在,你可以这样做:

echo $a->getAttribute('href');
echo $a->nodeValue;
echo $img->getAttribute('src');

这将打印:

/path/to/page.html 
Page name 
path/to/image.jpg 

答案 1 :(得分:0)

http://ca2.php.net/manual/en/function.preg-match.php - 如果你想使用正则表达式

http://php.net/manual/en/book.simplexml.php

如果您需要使用xml解析。

// Simple xml
$xml = simplexml_load_string($html);

$attr = $xml->attributes();
echo 'href: ' . $attr['href'] . PHP_EOL;

答案 2 :(得分:0)

可能的替代方法:

$domXpath = new DOMXPath(DOMDocument::loadHTML($html));
$href = $domXpath->query('a/@href')->item(0)->nodeValue;
$src = $domXpath->query('img/@src')->item(0)->nodeValue;

空/空检查取决于您。