Php 无法转换DomeElement
我正在通过类名使用DOM解析元素。我正在使用以下函数检索信息:Php 无法转换DomeElement,php,arrays,dom,Php,Arrays,Dom,我正在通过类名使用DOM解析元素。我正在使用以下函数检索信息: <?php function getElementsByClassName(DOMDocument $DOMDocument, $ClassName) { $Elements = $DOMDocument -> getElementsByTagName("*"); $Matched = array(); foreach($Elements as $node) { if( ! $n
<?php function getElementsByClassName(DOMDocument $DOMDocument, $ClassName) {
$Elements = $DOMDocument -> getElementsByTagName("*");
$Matched = array();
foreach($Elements as $node) {
if( ! $node -> hasAttributes())
continue;
$classAttribute = $node -> attributes -> getNamedItem('class');
if( ! $classAttribute)
continue;
$classes = explode(' ', $classAttribute -> nodeValue);
if(in_array($ClassName, $classes))
$Matched[] = $node;
}
return $Matched;
}
?>
当回显$price时,它证实了我的假设,即它是一个数组
使用print_r($price);,数组显示如下内容,其中包含19个不同的变量,即应包含的确切数量:
Array ( [0] => DOMElement Object ( ) [1] => DOMElement Object ( ) [2] => DOMElement Object ( ) [3] => DOMElement Object ( ) [4] => DOMElement Object ( ) [5] => DOMElement Object ( ) [6] => DOMElement Object ( ) [7] => DOMElement Object ( ) [8] => DOMElement Object ( ) [9] => DOMElement Object ( ) [10] => DOMElement Object ( ) [11] => DOMElement Object ( ) [12] => DOMElement Object ( ) [13] => DOMElement Object ( ) [14] => DOMElement Object ( ) [15] => DOMElement Object ( ) [16] => DOMElement Object ( ) [17] => DOMElement Object ( ) [18] => DOMElement Object ( ) )
但是,当我尝试将此数组用作字符串时,会出现以下错误:
echo $price[5];
Catchable fatal error: Object of class DOMElement could not be converted to string
我很难弄明白为什么不能转换成字符串?任何帮助都将不胜感激 因为
domeElement
不是字符串,也没有“magic”\uu toString()
方法
首先是的PHP文档,它是的一个子类。后者有一个nodeValue
和一个textContent
属性,因此您可以尝试:
$priceValue = $price[5]->nodeValue
或
您甚至可以进一步检索实际的文本节点子节点,但这可能超出了您的需要,并且只会使事情变得复杂(尤其是对于只读访问)。我必须说,您的函数
getElementsByClassName
完全没有必要
使用PHP的DOM库检索属于某个类的所有节点可以使用XPath轻松完成
例如,如下所示(假设$dom
是您的dom结构对象):
$priceValue = $price[5]->nodeValue
$priceValue = $price[5]->textContent
$prices = array();
foreach((new DOMXPath($dom))->query('//*[@class="amount"]') as $price) {
$prices[] = $price->nodeValue;
}