2016-05-13 2 views
2

Я продолжаю пробовать различные методы извлечения данных из таблицы HTML, например, с помощью xpath. Таблица (ы) не содержит классов, поэтому я не уверен, как использовать xpath без классов или Id. Эти данные извлекаются из файла rss xml. В настоящее время я использую DOM. После того, как извлечь данные, я попытаюсь разобраться, таблицы по названию работыКак извлечь данные из таблицы HTML с помощью php

Вот мой PHP код

$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; 
} 

Это HTML я извлечение информации из

<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

Что вам нужно извлечь? –

+0

Ну, мне нужно разобрать все данные внутри таблицы. У меня много таблиц, как это, так как это rss-канал. Вся цель состоит в том, чтобы иметь возможность реорганизовать все таблицы в алфавитном порядке в соответствии с типом задания –

+0

Вам нужен текст или html внутри 'table'? Пожалуйста, обновите свой вопрос образцом желаемого результата. –

ответ

3

Вы можете использовать xpath для query('//td') и получить td HTML, используя C14N(), что-то вроде:

$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; 
} 

Выход:

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

C14N();

Возвращает канонизированный узлы как string или FALSE на провал


Update:

Другой вопрос, как я могу захватить отдельные таблицы данных? Например, просто захватить, Job ID

Использование XPathcontains, то есть:

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

Update V2:

Как я могу получить следующую таблицу данных после этого (на самом деле получить задание Id)?

Использование following-sibling::*[1], то есть:

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

Извините, не обращайте внимания на мое последнее сообщение. Спасибо большое. Я занимаюсь поиском в течение недели, чтобы решить эту проблему. Можете ли вы направить меня на некоторые хорошие ресурсы для такого рода разбора? Другой вопрос, как я могу захватить отдельные данные таблицы? Например, просто возьмите, Идентификатор задания? –

+0

Большое вам спасибо, я буду! –

+0

Вы очень приветствуетесь @JoseOrtiz, GL –

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

Спасибо, я попробую ваше решение, как только смогу Кейта –

Смежные вопросы