DOMDocument解析 - 如何从TD获得样式背景颜色?

时间:2016-06-13 09:57:01

标签: php parsing domdocument

$contents = '<table><tr><td style="background-color:#fffddd;">Row 1 Column 1</td><td style="background-color:#444;">Row 1 Column 2</td></tr><tr><td style="background-color:#555;">Row 2 Column 1</td><td style="background-color:#666;">Row 2 Column 2</td></tr></table>';

$DOM = new DOMDocument;
$DOM->loadHTML($contents);

$items = $DOM->getElementsByTagName('tr');

$str = "";
foreach ($items as $node) {
    foreach ($node->childNodes as $element) {
        $str .= $element->nodeValue . ", ";
    }
    $str .= "<br />";
}
echo $str;

它代码td中的返回文字,但如何从background-color获取样式td

2 个答案:

答案 0 :(得分:1)

我没有测试过,但它应该是:

$element->getAttribute('style'); 

如果样式标记中有多个样式,则可以使用正则表达式。

更新

$re = "/background-color:\\s*(\\#.*?);/"; 
$str = "background-color: #fffddd; color: #000; font-size: 14px;"; 
preg_match($re, $str, $matches);

$matches应包含背景颜色。但这也没有经过充分测试。可能是你必须稍微调整一下RegEx

答案 1 :(得分:1)

您可以通过style=""访问->getAttribute("style")属性。在foreach中,您可以添加以下内容:

$str = array();
foreach ($items as $node) {
    foreach ($node->childNodes as $element) {
        $str[] = array($element->nodeValue . ", ", $element->getAttribute("style"));
    }
}

上面的代码将返回一个二维数组,其中包含值和样式:

echo $str[0][0]; // Row 1 Column 1,
echo $str[0][1]; // background-color:#fffddd;

但是,如果你的风格看起来像(例如):

style="background-color: #fffddd; color: #000; font-size: 14px;"

PHP返回将是:

background-color: #fffddd; color: #000; font-size: 14px;

因此,如果您需要背景颜色,则需要解析此style=""次返回。