2012-01-06 22 views
1

使用dom html。我想將節點值轉換爲字符串:將nodevalue轉換爲字符串

$html = @$dom->loadHTMLFile('url'); 


    $dom->preserveWhiteSpace = false; 


    $tables = $dom->getElementsByTagName('body'); 


    $rows = $tables->item(0)->getElementsByTagName('tr'); 

    // loop over the table rows 
    foreach ($rows as $text =>$row) 
    { 
$t=1; 

    // get each column by tag name 
     $cols = $row->getElementsByTagName('td'); 
//getting values 

$rr = @$cols->item(0)->nodeValue; 

print $rr; (it prints values of all 'td' tag fine) 
} 
print $rr; (it prints nothing) I want it to print here 

?> 

我想要nodevalues轉換爲字符串進一步操作。

+0

歡迎來到SO。請花點時間讓你的問題有一點可讀性,這樣我們可以幫助你更好。 – Starx 2012-01-06 08:00:39

+0

您正在使用'@'運算符來抑制錯誤。如果發生錯誤,您將不會注意到它。例如。如果文檔無法加載(服務器關閉),則不會有節點提取任何內容。另外,如果你正確地縮進你的代碼,它會更好的可讀性,並且更容易處理。 – hakre 2012-01-06 08:07:28

回答

1

每次遍歷foreach您覆蓋$rr變量的值。第二個print $rr將打印最後一個td的值 - 如果它是空的,那麼它將不打印任何東西。

如果你正在嘗試做的是打印所有值,而不是將它們寫入到一個數組:

$rr = array(); 
foreach($rows as $text =>$row) { 
    $rr[] = $cols->item(0)->nodeValue; 
} 
print_r($rr); 
0

使用DOM::saveXMLDOM::saveHTML將節點值轉換爲字符串。

+0

我不想將輸出保存到文件中,我想將它保存到字符串或數組中進行操作。 – 2012-01-10 10:12:46

+0

希望您點擊了我提供的鏈接,因爲這2個函數都是** NOT **用於保存任何文件。這兩個都只是將內容返回到一個字符串中。 – anubhava 2012-01-10 10:15:57

0

沒有嘗試@ $ cols->項(0) - >的textContent

+0

是的,它沒有工作 – 2012-01-10 10:13:03

1
// new dom object 
    $dom = new DOMDocument(); 

    //load the html 
    $html = @$dom->loadHTMLFile('http://webapp-da1-01.corp.adobe.com:8300/cfusion/bootstrap/'); 

    //discard white space 
    $dom->preserveWhiteSpace = false; 

    //the table by its tag name 
    $tables = $dom->getElementsByTagName('head'); 

//get all rows from the table 
    $la=array(); 
$rows = $tables->item(0)->getElementsByTagName('tr'); 

    // loop over the table rows 
$array = array(); 
    foreach ($rows as $text =>$row) 
    { 
$t=1; 
$tt=$text; 
    // get each column by tag name 
$cols = $row->getElementsByTagName('td'); 
    // echo the values 
     #echo @$cols->item(0)->nodeValue.''; 
//  echo @$cols->item(1)->nodeValue.''; 
$array[$row] = @$cols->item($t)->nodeValue; 
} 
print_r ($array); 

它打印陣列 ( ) 罷了。我也用「$ cols-> item(0) - > nodeValue;」