DOMDocument: como obter o HTML interno como Strings separados por intervalos de linha?

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

Oi, eu quero obter o texto dentro da tag ‘p’. você vê que há três linhas diferentes e eu quero imprimi-las separadamente depois de adicionar algum texto extra com cada linha. aqui está o meu bloco de código

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

O problema principal é $ line contém o texto completo dentro da tag ‘p’, incluindo a tag ‘br’. Como posso separar as três linhas para tratá-las, respectivamente?

desde já, obrigado.

Você pode fazer isso com o XPath. Tudo o que você precisa fazer é consultar os nós de texto. Não há necessidade de explodir ou algo assim:

 $dom = new DOMDocument; $dom->loadHtml($html); $xp = new DOMXPath($dom); foreach ($xp->query('/html/body/blockquote/p/text()') as $textNode) { echo "\n
  • ", trim($textNode->textContent); }
  • A alternativa não-XPath seria iterar os filhos da tag P e apenas exibi-los quando forem nós DOMText:

     $dom = new DOMDocument; $dom->loadHtml($html); foreach ($dom->getElementsByTagName('p')->item(0)->childNodes as $pChild) { if ($pChild->nodeType === XML_TEXT_NODE) { echo "\n
  • ", trim($pChild->textContent); } }
  • Ambos irão produzir ( demo )

     
  • 2 1/2 cups sweet cherries, pitted
  • 1 tablespoon cornstarch
  • 1/4 cup fine-grain natural cane sugar
  • Veja também DOMDocument em php para uma explicação do conceito do nó. É crucial entender quando trabalha com DOM.

    Você pode usar

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

    aqui está uma solução na syntax do javascript

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

    Você pode usar a function php explode como esta. (assumindo que cada linha em sua tag

    termina com o
    )

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