Php 调用未定义的方法DOMDocument::GetElementsByCassName()

Php 调用未定义的方法DOMDocument::GetElementsByCassName(),php,xml,dom,Php,Xml,Dom,我正在尝试从以下img标记获取alt标记 <div class="localImage"> <a href="/Electronic-Deals/b/ref=amb_link_185249707_2?ie=UTF8&amp;node=4192584031&amp;pf_rd_m=A1VBAL9TL5WCBF&amp;pf_rd_s=center-new-12&amp;pf_rd_r=07C4YQ4KZ15MZJQBT2PD&am

我正在尝试从以下img标记获取alt标记

<div class="localImage">

    <a href="/Electronic-Deals/b/ref=amb_link_185249707_2?ie=UTF8&amp;node=4192584031&amp;pf_rd_m=A1VBAL9TL5WCBF&amp;pf_rd_s=center-new-12&amp;pf_rd_r=07C4YQ4KZ15MZJQBT2PD&amp;pf_rd_t=701&amp;pf_rd_p=736512207&amp;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>
但是我得到以下错误

Call to undefined method DOMDocument::getElementsByClassName()
谁能帮我一下哪里弄错了……因为我以前尝试过这种代码模式,但从来没有遇到过这样的问题。

类不包含方法
getElementsByClassName

使用


PHPs DOMDocument不支持该方法。它可以被Xpath模拟。任何不返回伪元素的CSS3选择器都可以转换为Xpath表达式

因此,要匹配CSS类属性,您必须了解它是如何工作的。CSS类是一个令牌属性。它包含几个用空格分隔的类名。在Xpath中,有一种方法可以将空白规范化为单个空格。如果在类属性上使用它,并在前面和后面添加一个空格,则任何标记都与模式
{space}ClassOne{space}
匹配。有了几个令牌,您将得到类似于
{space}ClassOne{space}ClassTwo{space}ClassThree{space}
的东西。重要的部分是它确实包含
,但不包含
{space}Class{space}

CSS选择器
.className
可以转换为Xpath表达式
/*[包含(concat(“”,normalize space(@class),“”),“className”)]
。第一部分规范化属性,使其与令牌匹配,而不仅仅是与可能是令牌名称一部分的字符串匹配

在您的情况下,您可以对其进行优化以匹配
div
元素:

//div[contains(concat(“),normalize space(@class),”),“localImage”)]

要使用Xpath,需要为文档创建一个DOMXpath实例

$document = new DOMDocument();
$document->loadHTML($html2);
$xpath = new DOMXpath($document);

$expression = './/div[contains(concat(" ", normalize-space(@class), " "), " localImage ")]';
foreach ($xpath->evaluate($expression) as $div) {
  //...
}

也许下次再多做点研究。另外,
curl
标记与您的问题完全无关@另外…感谢您的及时帮助,我没有使用xpath…因此发现很难处理…我正在使用以下代码,@$dom->loadHTML($html2)$xpath=新的DOMXpath($dom)$xpath->query('//div[contains(@class,“localImage”)]')$名称=“”;foreach($xpath->getElementsByTagName('img')作为$i){$name=$i->getAttribute('alt');}echo$name;但是它给了我错误…你能帮我写下面的代码吗…我只得到[div]…$xpath=newdomxpath($dom)$elements=$xpath->query('//div[contains(@class,“localImage”)]');foreach($element为$element){echo“
[“$element->nodeName.””;$nodes=$element->childNodes;foreach($nodes为$node){echo$node->nodeValue.\n”;}}@cetver…你能帮我写代码吗?不要惊慌;)下面是匹配不够的代码片段。“class”是一个令牌属性,因此它可以包含由任意数量的空格分隔的任意数量的类。简单的contains()也与部分类名匹配。
$xpath = new DOMXpath($dom);
$xpath->query('//div[contains(@class, "localImage")]'); //instance of DOMNodeList
$document = new DOMDocument();
$document->loadHTML($html2);
$xpath = new DOMXpath($document);

$expression = './/div[contains(concat(" ", normalize-space(@class), " "), " localImage ")]';
foreach ($xpath->evaluate($expression) as $div) {
  //...
}