2016-04-27 4 views
0

Ich versuche, den Inhalt einer Tabellenkalkulationszelle aus Google Docs mit DOMDocument in PHP aufzurufen.Wie greifen Sie mit DOMDocument auf einen HTML-Knoten zu, während Sie die innere HTML-Formatierung beibehalten?

Ich kann auf den Knoten zugreifen, aber der Inhalt ist im Nur-Text und fehlt die HTML-Formatierung.

Hier ist der Beispiellink, den ich verwende, der Text hat, der fett, kursiv und unterstrichen ist.

https://docs.google.com/spreadsheets/d/1Klpic32Gb_TDblDZDJQOkDedFGuNHAokxUXqrCPDFWE/pubhtml 

Unten ist die PHP-Code verwende ich:

$url = "https://docs.google.com/spreadsheets/d/1Klpic32Gb_TDblDZDJQOkDedFGuNHAokxUXqrCPDFWE/pubhtml"; 

    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
    $htmlData = curl_exec($curl); 
    curl_close($curl); 

    $dom  = new \DOMDocument(); 
    $html  = $dom->loadHTML($htmlData); 
    $dom->preserveWhiteSpace = false; 

    $tables  = $dom->getElementsByTagName('table'); 
    $rows  = $tables->item(0)->getElementsByTagName('tr'); 
    $cols  = $rows->item(1)->getElementsByTagName('td'); 

    $rowHeaders = array(); 
    foreach ($cols as $i => $node) { 

     if($i >= 0) $rowHeaders[] = $node->textContent; 
    } 

    foreach ($rows as $i => $row){ 
     if($i == 0) continue; 
     $cols = $row->getElementsByTagName('td'); 
     $row = array(); 
     foreach ($cols as $j => $node) { 
      $row[$rowHeaders[$j]] = $node->textContent; 
     } 
     $table[] = $row; 
    } 

    die(print_r($table)); 

Meine Ausgabe ist die innere HTML-Formatierung fehlt:

[1] => Array 
    (
     [Variable] => html_body 
     [Data] => Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 

    ) 

Antwort

1

Dont verwenden Sie die textcontent, versuchen Sie es:

foreach ($cols as $j => $node) { 
    //$row[$rowHeaders[$j]] = $node->textContent; 
    $innerHTML= ''; 
    $children = $node->childNodes; 
    foreach ($children as $child) { 
     $innerHTML .= $child->ownerDocument->saveXML($child); 
    } 

    $row[$rowHeaders[$j]]= $innerHTML; 
} 
+0

Das ist das Ticket. Vielen Dank. – sterling

Verwandte Themen