2013-07-17 4 views
0

У меня есть HTML-таблицыHTML Таблица синтаксического анализа с использованием DOM

Мой Синтаксический Кодекс

$src = new DOMDocument('1.0', 'utf-8'); 
$src->formatOutput = true; 
$src->preserveWhiteSpace = false; 
@$src->loadHTML($result); 
$xpath = new DOMXPath($src); 
$data=$xpath->query('//td[ contains (@class, "bodytext1") ]'); 
foreach($data as $datas) 
{ 
echo $datas->nodeValue."<br />"; 
} 
$values=$xpath->query('//tr[ contains (@bgcolor, "f3fafe") ]'); 
foreach($values as $value) 
{ 
echo $value->nodeValue."<br />"; 
} 
$values1=$xpath->query('//tr[ contains (@bgcolor, "def0fa") ]'); 
foreach($values1 as $value1) 
{ 
echo $value1->nodeValue."<br />"; 
} 

для печати, и я хочу их повторять вместе с другими линиями, как показано выше, на выходе мне нужно. и я хочу все это дело в массиве, так что я могу вставить его в базу данных

Может кто-нибудь, пожалуйста, руководство меня или дать мне подсказку, так что я могу сделать это

+0

Где вы загружаете HTML-код? –

+0

my html находится в $ result – user2501866

+0

Для первых двух запросов вам нужно извлечь nodeValues, извлечь из них нужные вам данные и сохранить их в переменных. Затем, в третьем поиске, напечатайте каждую строку вместе с данными, которые вы извлекли в первых двух поисках. Трудно быть точным, если на HTML не смотреть, и я не могу получить доступ к вашему Gist - разместите его здесь. –

ответ

0

Это должно вам начать работу.

$src = new DOMDocument('1.0', 'utf-8'); 
$src->formatOutput = true; 
$src->preserveWhiteSpace = false; 
$src->loadHTML($result); 
$xpath = new DOMXPath($src); 

// get header data 
$data=$xpath->query('//table[1]//td'); 

$htno = trim(explode(":",$data->item(0)->nodeValue)[1]); 
$name = trim(explode(":",$data->item(1)->nodeValue)[1]); 
$fatherName=trim(explode(":",$data->item(2)->nodeValue)[1]); 

// rows from 2nd table 
$values1=$xpath->query('//table[2]//tr'); 
$header = true; // flag to track whether we've read the header row. 
foreach($values1 as $value1) 
{ 
if (!$header) { 
    $rowdata = str_replace("\r\n"," ",$value1->nodeValue); 
    echo $htno," ",$name," ",$fatherName," ",$rowdata,"\n"; 
} 
$header = false; 
} 

Примечание:

  • Флаг $ заголовок быстро исправить. Лучший запрос Xpath может устранить необходимость в нем.
  • str_replace у дна является уродливым, но целесообразным. Возможно, вы захотите сыграть с запросом xpath, чтобы узнать, можете ли вы его улучшить.
  • Выход не отформатирована для HTML - линии разделяются \n
  • я получил предупреждение на одной строке, где она содержала &, поэтому я изменил его на AND. Возможно, вам придется предварительно обработать ваши таблицы, чтобы как-то их устранить.
+0

получение ошибки синтаксиса: неожиданный '[' for $ htno = trim (explode (":", $ data-> item (0) -> nodeValue) [1]); эта строка sir – user2501866

+0

Какая версия PHP? Это работает с PHP5.4. Попробуйте разбить выражение на это: '$ temp = explode (": ", $ data-> item (0) -> nodeValue); $ htno = trim ($ temp [1]); '. Возможно, вам придется сделать это и для других линий. –

+0

Thankyou So Much sir :) – user2501866

-1

Возможно, вы используете dll для сторонних разработчиков, например "Html Agility Pack". инструмент, который позволяет конвертировать html в xml.

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