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