php Xpath получает innerHTML с тегами innerHTML - PullRequest
2 голосов
/ 22 октября 2011

У меня есть HTML-файл, отформатированный следующим образом:

<p class="p1">subject</p>
<p class="p2">detail <span>important</span></p>

<p class="p1">subject</p>
<p class="p2">detail<span>important</span></p>

Я написал PHP-код для автоматического получения каждого p1 и подробно вставил их в мою таблицу MySQL.

этомой код:

$doc = new DOMDocument();

$doc->loadHTMLFile("file.html");

$xpath = new DomXpath($doc);

$subject = $xpath->query('//p');


for ($i = 0 ; $i < $subject->length-1 ; $i ++) {

if ($subject->item($i)->getAttribute("class") == "p1")
    echo $subject->item($i)->nodeValue;
}
...

Это не мой полный код, но проблема в следующем:

echo $subject->item($i)->nodeValue;

Что дает мне <p>detail important</p>, без тега <span></span>.

Очень важно иметь теги span вокруг «важной» части детали.Есть ли функция, которая может сделать это без головной боли?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 30 октября 2011

Я нашел ответ на свой вопрос :) Благодаря SimpleHTMLDOM

foreach($html->find('p') as $element) {

 switch ($element->class) {
      case 'p1':
                     $subject = $element;
                     break;
      case 'p2': $detail .= html_entity_decode($element);

 }

}

хитрость в:

html_entity_decode($element);
0 голосов
/ 22 октября 2011

Всякий раз, когда мне нужно разобрать HTML, я запускаю его через SimpleHTMLDOM:

http://simplehtmldom.sourceforge.net/

Я рекомендую использовать версию 1.11. По разным причинам 1.5 довольно неработоспособен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...