我正在尝试从以下img标记中获取alt标记...
<div class="localImage">
<a href="/Electronic-Deals/b/ref=amb_link_185249707_2?ie=UTF8&node=4192584031&pf_rd_m=A1VBAL9TL5WCBF&pf_rd_s=center-new-12&pf_rd_r=07C4YQ4KZ15MZJQBT2PD&pf_rd_t=701&pf_rd_p=736512207&pf_rd_i=20">
<img src="http://g-ecx.images-amazon.com/images/G/31/rcx-events/cat-navs-electronics1._V335880105_.png" alt="Electronics" border="0" height="140" width="170"></a>
</div>
为此,我尝试了以下代码......
$dom = new DOMDocument();
@$dom->loadHTML($html2);
foreach($dom->getElementsByClassName("localImage") as $tr) {
$name = '';
foreach($tr->getElementsByTagName('img') as $i)
{
$name = $i->getAttribute('alt');
}
echo $name;
但是我收到以下错误......
Call to undefined method DOMDocument::getElementsByClassName()
任何人都可以帮助我在哪里弄错了...因为我之前尝试过这种代码模式,但从未遇到过这样的问题。
2 个答案:
答案 0 :(得分:5)
班级DOMDocument不包含方法getElementsByClassName
使用xpath
$xpath = new DOMXpath($dom);
$xpath->query('//div[contains(@class, "localImage")]'); //instance of DOMNodeList
答案 1 :(得分:4)
The method is not supported by PHPs DOMDocument. It can be emulated by Xpath. Any CSS3 selector that does not return pseudo elements can be converted into an Xpath expression.
So to match a CSS class attribute you have to understand how it works. A CSS class is a token attribute. It contains several class names separated by whitespaces. In Xpath here is a method that can normalize the whitespaces to single spaces. If use that on a class attribute and add a space to the front and back any token matches the pattern {space}ClassOne{space}. With several tokens you would end up with something like {space}ClassOne{space}ClassTwo{space}ClassThree{space}. The import part that does contain Class but not {space}Class{space}.
The CSS selector .className can be converted into to the Xpath expression .//*[contains(concat(" ", normalize-space(@class), " "), " className ")]. The first part normalizes the attribute so that it matches the token and not just the string that could be part of a token name.
In your case you can refine that to match div elements:
.//div[contains(concat(" ", normalize-space(@class), " "), " localImage ")]
To use Xpath you need to create an DOMXpath instance for the document.
$document = new DOMDocument();
$document->loadHTML($html2);
$xpath = new DOMXpath($document);
$expression = './/div[contains(concat(" ", normalize-space(@class), " "), " localImage ")]';
foreach ($xpath->evaluate($expression) as $div) {
//...
}