DOMDocument: как получить внутренний HTML как строки, разделенные перерывами?

<blockquote> <p> 2 1/2 cups sweet cherries, pitted<br> 1 tablespoon cornstarch <br> 1/4 cup fine-grain natural cane sugar </p> </blockquote> 

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

  $tags = $dom->getElementsByTagName('blockquote'); foreach($tags as $tag) { $datas = $tag->getElementsByTagName('p'); foreach($datas as $data) { $line = $data->nodeValue; echo $line; } } 

Основная проблема: $ line содержит полный текст внутри тега 'p', включая тег 'br'. как я могу отделить три линии, чтобы их обрабатывать соответственно?

заранее спасибо.

Вы можете сделать это с помощью XPath. Все, что вам нужно сделать, это запросить текстовые узлы. Не нужно взорваться или что-то в этом роде:

 $dom = new DOMDocument; $dom->loadHtml($html); $xp = new DOMXPath($dom); foreach ($xp->query('/html/body/blockquote/p/text()') as $textNode) { echo "\n<li>", trim($textNode->textContent); } 

Альтернативой non-XPath было бы итерацию дочерних элементов тега P и вывод их только тогда, когда они являются узлами DOMText:

 $dom = new DOMDocument; $dom->loadHtml($html); foreach ($dom->getElementsByTagName('p')->item(0)->childNodes as $pChild) { if ($pChild->nodeType === XML_TEXT_NODE) { echo "\n<li>", trim($pChild->textContent); } } 

Оба будут выводить ( демо )

 <li>2 1/2 cups sweet cherries, pitted <li>1 tablespoon cornstarch <li>1/4 cup fine-grain natural cane sugar 

Также см. DOMDocument в php для объяснения концепции узла. Крайне важно понимать, когда работаете с DOM.

Вы можете использовать

 $lines = explode('<br>', $data->nodeValue); 

вот решение в синтаксисе javascript

  var tempArray = $line.split("<br>"); echo $line[0] echo $line[1] echo $line[2] 

Вы можете использовать функцию php explode как это. (при условии, что каждая строка в тэге <p> заканчивается на)

 $tags = $dom->getElementsByTagName('blockquote'); foreach($tags as $tag) { $datas = $tag->getElementsByTagName('p'); foreach($datas as $data) { $contents = $data->nodeValue; $lines = explode('<br>',$contents); foreach($lines as $line) { echo $line; } } }