DOMDocument 解析 - 如何从 TD 获取样式背景颜色?
DOMDocument parse - How get style background-color from TD?
$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
中编码 return 文本,但是如何从 td
中获取样式 background-color
?
我没有测试过,但应该是:
$element->getAttribute('style');
如果您的样式标签中有多种样式,您可以使用正则表达式。
更新:
$re = "/background-color:\s*(\#.*?);/";
$str = "background-color: #fffddd; color: #000; font-size: 14px;";
preg_match($re, $str, $matches);
$matches
应包含背景颜色。但这也没有经过很好的测试。可能是您必须针对极端情况稍微调整 RegEx
您可以通过 ->getAttribute("style")
访问 style=""
属性。在您的 foreach
中,您可以添加:
$str = array();
foreach ($items as $node) {
foreach ($node->childNodes as $element) {
$str[] = array($element->nodeValue . ", ", $element->getAttribute("style"));
}
}
上面的代码将return一个二维数组,其中包含值和样式:
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 return 将是:
background-color: #fffddd; color: #000; font-size: 14px;
因此,如果您需要 ONLY 背景色,则需要解析此 style=""
return.
$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
中编码 return 文本,但是如何从 td
中获取样式 background-color
?
我没有测试过,但应该是:
$element->getAttribute('style');
如果您的样式标签中有多种样式,您可以使用正则表达式。
更新:
$re = "/background-color:\s*(\#.*?);/";
$str = "background-color: #fffddd; color: #000; font-size: 14px;";
preg_match($re, $str, $matches);
$matches
应包含背景颜色。但这也没有经过很好的测试。可能是您必须针对极端情况稍微调整 RegEx
您可以通过 ->getAttribute("style")
访问 style=""
属性。在您的 foreach
中,您可以添加:
$str = array();
foreach ($items as $node) {
foreach ($node->childNodes as $element) {
$str[] = array($element->nodeValue . ", ", $element->getAttribute("style"));
}
}
上面的代码将return一个二维数组,其中包含值和样式:
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 return 将是:
background-color: #fffddd; color: #000; font-size: 14px;
因此,如果您需要 ONLY 背景色,则需要解析此 style=""
return.