我有以下内容:
$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');
}
更聪明的方法是什么?
如果使用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
可能的替代方法:
$domXpath = new DOMXPath(DOMDocument::loadHTML($html));
$href = $domXpath->query('a/@href')->item(0)->nodeValue;
$src = $domXpath->query('img/@src')->item(0)->nodeValue;
空/空检查由您决定。
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;