2012-01-06 93 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;”