我不确切知道为什么,但我的span元素是一个DomText对象。我无法得到跨度的属性。
我使用简单的DomDocument(而不是xpath),因为这比我试过的其他解决方案更快。
$dom = new \DOMDocument();
$dom->loadHTML($contentOfDom);
$trs = $dom->getElementsByTagName('tr');
$result = array();
$previous = null;
foreach ($trs as $tr) {
$current = null;
foreach ($tr->childNodes as $td) {
if ($td->nodeName === 'td') {
$current[] = trim($td->nodeValue);
$childOfTD = $td->childNodes->item(0);
print_r($childOfTD);
//echo 'title:'.$childOfTD->getAttribute('title')."<br>";
//var_dump($childOfTD->getAttribute('name') == "title");
}
}
//.... other codes
}
这是具有span元素的TD:
<td>
<span class="emphasize" title="this modified">
2.36
</span>
</td>
$td->nodeValue
将获得2.36值,这很好。但我没有得到span的title属性,因为我需要检查一下。
(但是,也许我可以在将值更新到数据库之前检查它 - 也许这更快)
这就是看nodevalue
(别名print_r($element)
)
DOMText Object (
[wholeText] => 2.36
[data] => 2.36
[length] => 25
[nodeName] => #text
[nodeValue] => 2.36
[nodeType] => 3
[parentNode] => (object value omitted)
[childNodes] =>
[firstChild] =>
[lastChild] =>
[previousSibling] =>
[attributes] =>
[ownerDocument] => (object value omitted)
[namespaceURI] =>
[prefix] =>
[localName] =>
[baseURI] =>
[textContent] => 2.36
)
不知怎的,我想用domdocument获取span的title属性。但是,如果这是不可能的,那么我对每一个快速解决方案都持开放态度:)
答案 0 :(得分:0)
您的span元素不是DomText对象。
td
开始标记和span
开始标记之间的空格是DomText对象。
<td>
<span class="emphasize" title="this modified">
遍历子节点,直到找到范围,或使用getElementsByTagName
代替childNodes
。
答案 1 :(得分:0)
这可能对您有所帮助
if ($td->nodeName === 'td') {
$current[] = trim($td->nodeValue);
$childOfTD = $td->childNodes->item(0);
// print_r($childOfTD);
// ====================== title ==================
$title = $td->getElementsByTagName("span")->item(0)->getAttribute("title");
echo $title;
// ===============================================
}