如何获取domText对象的属性? (这实际上是一个跨度元素)

时间:2014-02-01 11:20:01

标签: php dom domdocument

我不确切知道为什么,但我的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属性。但是,如果这是不可能的,那么我对每一个快速解决方案都持开放态度:)

2 个答案:

答案 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;
       // ===============================================
}