我需要获得具有样式属性
的所有标签$html = '<div style="font-style: italic; text-align: center;
background-color: red;">On The Contrary</div><span
style="font-style: italic; background-color: rgb(244, 249, 255);
font-size: 32px;"><b style="text-align: center;
background-color: rgb(255, 255, 255);">This is USA</b></span>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXpath($dom);
foreach ($xp->query('/*[@style]') as $node) {
$style = $node->getAttribute('style');
echo $style;
}
但它什么都没有。 我的代码中的错误是什么? 此外,我还想在样式中只获取CSS PRoperty名称,例如font-size,font-weight,font-family而不是它们的值。
答案 0 :(得分:5)
你的表达式中只需要一个正斜杠:
foreach( $xp->query('//*[@style]') as $node) {
echo $node->tagName . " = " . $node->getAttribute('style') . "\n";
}
这将打印(请注意,它会保留现有属性中的换行符):
div = font-style: italic; text-align: center;
background-color: red;
span = font-style: italic; background-color: rgb(244, 249, 255);
font-size: 32px;
b = text-align: center;
background-color: rgb(255, 255, 255);
答案 1 :(得分:0)
xpath选择器是
//*[@style]
对于样式内容,您必须解析它,这意味着
$attr_names = array_map( function($v){ return (explode(':',$v))[0];},
explode(';',$style));