在这里,我从我需要的网页(= 'titre')中回显类元素,但是如何回显它们的值呢?似乎不能让它起作用。
$html = file_get_contents('http://www.spoofedwebpage.int/notice/search/wanted');
$dom = new DOMDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$divs = $dom->getElementsByTagName('div'); // Sample to get div element
$spans = $dom->getElementsByTagName('span'); // Sample to get div element
$i = 0;
while($span = $spans->item($i++))
{
$class_node = $span->attributes->getNamedItem('class');
if($class_node)
{
if($class_node->value == "titre")
{
echo "Class is : " . $span->attributes->getNamedItem('class')->value .
"<br>";
}
}
}发布于 2014-06-13 12:37:46
类属性有点特殊,因为它们是令牌列表(由空格分隔的几个类名),但是我建议您使用Xpath来获取节点:
$html = <<<'HTML'
<div class="titre foo">abc</div>
<span class="titre bar">def</span>
<div class="bar">hij</div>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$xpath = new DOMXpath($dom);
$expression = '//*[(self::div or self::span) and contains(concat(" ", normalize-space(@class), " "), " titre ")]';
foreach ($xpath->evaluate($expression) as $node) {
echo "Text is: ", $node->nodeValue, "\n";
}Text is: abc
Text is: def关于这句话:
选择文档中的任何元素.
//*
..。如果是div或span ..。
//*[(self::div or self::span)]
..。class属性包含一个类名titre。
//*[ (self::div or self::span) and contains(concat(" ", normalize-space(@class), " "), " titre ") ]
normalize-space()接受一个字符串并将所有空白组转换为单个空格。它也从字符串的开头和结尾剥离空白空间。concat用于向规范化字符串的开头和结尾添加一个空格。结果是一个类名字符串,如空格、CLASS_ONE空间、CLASS_TWO空间。这使得它能够查找像空间CLASS_ONE空间这样的子字符串。
顺便说一句你确定你在找titre而不是title吗
提示最初的答案选择了类属性,如果您对它感兴趣,请参阅history。
https://stackoverflow.com/questions/24204692
复制相似问题