2016-05-13 7 views
2

Ich versuche weiterhin verschiedene Methoden zum Extrahieren der Daten aus der HTML-Tabelle wie z. B. mit Xpath. Die Tabelle (n) enthält keine Klassen, so dass ich nicht sicher bin, wie man xpath ohne Klassen oder ID verwendet. Diese Daten werden aus einer rss xml-Datei abgerufen. Ich verwende derzeit DOM. Nachdem ich die Daten zu extrahieren, werde ich zu sortieren versuchen, die Tabellen von Job-TitelSo extrahieren Daten aus HTML-Tabelle mit PHP

Hier ist meine PHP-Code

$html=''; 
$xml= simplexml_load_file($url) or die("ERROR: Cannot connect to url\n check if report still exist in the Gradleaders system"); 

/*What we do here in this loop is retrieve all content inside the encoded content, 
*which includes the CDATA information. This is where the HTML and styling is included. 
*/ 

foreach($xml->channel->item as $cont){ 
    $html=''.$cont->children('content',true)->encoded.'<br>'; //actual tag name is encoded 
} 

$htmlParser= new DOMDocument();  //to parse html using DOMDocument 
libxml_use_internal_errors(true); // your HTML gives parser warnings, keep them internal 
$htmlParser->loadHTML($html);  //Loaded the html string we took from simple xml 

$htmlParser->preserveWhiteSpace = false; 
$tables= $htmlParser->getElementsByTagName('table'); 
$rows= $tables->item(0)->getElementsByTagName('tr'); 

foreach($rows as $row){ 
    $cols = $row->getElementsByTagName('td'); 
    echo $cols; 
} 

ist dies der HTML I Infos von

am Extrahieren

<table cellpadding='1' cellspacing='2'> 
 
    <tr> 
 
    <td><b>Job Title:</b></td> 
 
    <td>Job Example </td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>Job ID:</b></td> 
 
    <td>23992</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>Job Description:</b></td> 
 
    <td>Just a job example </td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>Job Category:</b></td> 
 
    <td>Work-study Position</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>Position Type:</b></td> 
 
    <td>Work-study</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>Applicant Type:</b></td> 
 
    <td>Work-study</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>Status:</b></td> 
 
    <td>Active</td> 
 
    </tr> 
 
    <tr> 
 
    <td colspan='2'><b><a href='https://www.myjobs.com/tuemp/job_view.aspx?token=I1iBwstbTs2pau+SjrYfWA%3d%3d'>Click to View More</a></b></td> 
 
    </tr> 
 
</table>

+0

Was brauchen Sie zu extrahieren? –

+0

Nun, ich muss alle Daten in der Tabelle analysieren. Ich habe viele Tabellen wie diese, da dies ein RSS-Feed ist. Das ganze Ziel ist es, alle Tabellen in alphabetischer Reihenfolge nach dem Job-Titel zu reorganisieren. –

+0

Sie brauchen den Text oder die HTML-Datei in 'table'? Bitte aktualisieren Sie Ihre Frage mit einem Muster der gewünschten Ausgabe. –

Antwort

3

können Sie xpath-query('//td') verwenden und rufen Sie die td html 0 mit, so etwas wie:

$dom = new DOMDocument(); 
$dom->loadHtml($html); 
$x = new DOMXpath($dom); 
foreach($x->query('//td') as $td){ 
    echo $td->C14N(); 
    //if just need the text use: 
    //echo $td->textContent; 
} 

Ausgang:

<td><b>Job Title:</b></td> 
<td>Job Example </td> 
<td><b>Job ID:</b></td> 
... 

C14N();

Returns canonicalized Knoten als string oder FALSE bei Ausfall


Update:

Eine andere Frage, wie kann ich einzelne Tabellendaten greifen? Zum Beispiel nur greifen, Job-ID

Verwenden XPathcontains, das heißt:

foreach($x->query('//td[contains(., "Job ID:")]') as $td){ 
    echo $td->textContent; 
} 

Update-V2:

Wie kann ich die nächsten Tabellendaten erhalten danach (um den Job Id tatsächlich zu bekommen)?

Verwenden following-sibling::*[1], das heißt:

echo $x->query('//td[contains(*, "Job ID:")]/following-sibling::*[1]')->item(0)->textContent; 
//23992 
+0

Entschuldigen Sie, ignorieren Sie meine letzte Nachricht. Ich danke dir sehr. Ich recherchiere seit einer Woche, um das zu lösen. Können Sie mich auf einige gute Ressourcen für diese Art von Parsing verweisen? Eine weitere Frage, wie kann ich einzelne Tabellendaten erfassen? Zum Beispiel, einfach greifen, Job-ID? –

+0

Vielen Dank, ich werde! –

+0

Sie sind herzlich willkommen @JoseOrtiz, GL –

-2
$xpathParser = new DOMXPath($htmlParser); 
$tableDataNodes = $xpathParser->evaluate("//table/tr/td") 
for ($x=0;$x<$tableDataNodes.length;$x++) { 
    echo $tableDataNodes[$x]; 
} 
+0

Vielen Dank, ich werde Ihre Lösung versuchen, sobald ich Keith kann –