0

我有一个包含一些 html 的变量。在 html 中有几个 p 标签彼此相邻。我想从那些 p 标签中检索文本并将它们格式化为 1 段并将这个新段落设置为一个新变量。那有意义吗?

<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>

变成:

<p>apple banana grape</p>

注意:html 中的元素可能会有所不同。例如,没有 iframe。某处的图像等。

4

2 回答 2

2

你可以使用 Xpath 来做到这一点

$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';

$doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXpath($doc);

$elements = $xpath->query("//p");
foreach ($elements as $node){
echo $node->nodeValue. "<br/>";
}
于 2012-06-12T16:43:48.307 回答
1

例子:

$html = '<h2></h2>
  <p>date</p>
  <ul></ul>
  <iframe></iframe>
  <p>apple</p>
  <p>banana</p>
  <p>grape</p>
  <ul></ul>';

if (preg_match_all('~<p>(?P<paragraphs>.*?)</p>~is', $html, $matches)) {
  print_r($matches['paragraphs']);
}

结果:

Array
(
    [0] => date
    [1] => apple
    [2] => banana
    [3] => grape
)

PS “聪明”投反对票的人,你能评论一下你为什么投反对票吗?:)))))))))))))))

投反对票的两个人的PPS 特别版:

$document = new DOMDocument();
$document->loadHTML($html);
$paragraphs = $document->getElementsByTagName('p');
$result     = array();

foreach ($paragraphs as $paragraph) {
  $result[] = $paragraph->nodeValue;  
}

print_r($result);
于 2012-06-12T16:31:18.363 回答