我在这里回应了我需要的网页中的类元素(=' 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>";
}
}
}
答案 0 :(得分:2)
类属性有点特殊,因为它们是令牌列表(由空格分隔的几个类名),但我建议你使用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
用于向规范化字符串的开头和结尾添加单个空格。结果是一串类名称,如 SPACE CLASS_ONE SPACE CLASS_TWO SPACE 。这允许它查找像 SPACE CLASS_ONE SPACE 这样的子字符串。
btw 您确定要查找titre
而不是title
吗?
提示原始答案选择了类属性,如果您对此感兴趣,请参阅history。