php - XPath - 选择特定标签后的所有内容

标签 php xpath

我试图将 h1 标记之后的 HTML 放入字符串中,直到下一个 h1 标记,然后继续。

例如,这是 HTML:

<h1>Heading</h1>
<p>Paragraph</p>
<ul>
  <li>List item</li>
  <li>List item</li>
</ul>
<p>Paragraph</p>
<h1>Heading 2</h1>
<ul>
  <li>List item</li>
  <li>List item</li>
</ul>
<p>Paragraph<img /></p>

然后我尝试创建这个数组:

array(
  0 => '<p>Paragraph</p><ul><li>List item</li><li>List item</li></ul><p>Paragraph</p>',
  1 => '<ul><li>List item</li><li>List item</li></ul><p>Paragraph<img /></p>'
)

选择 h1 标记之后直到下一个标记的所有内容的 XPath 查询是什么?

如有任何帮助或建议,我们将不胜感激。

更新:

我最终想要实现的是,使用 PHP,创建这种格式的数组:

array(
  'headings' => array(
      1 => '<h1>Heading</h1>',
      2 => '<h1>Heading 2</h1>'
  ),
  'content'  => array(
      1 => '<p>Paragraph</p><ul><li>List item</li><li>List item</li></ul><p>Paragraph</p>',
      2 => '<ul><li>List item</li><li>List item</li></ul><p>Paragraph<img /></p>'
  )
)

最佳答案

这是一个快速的方法。

假设您的代码放在$code中:

$code = <<<'CODE'
<h1>Heading</h1>
<p>Paragraph</p>
<ul>
  <li>List item</li>
  <li>List item</li>
</ul>
<p>Paragraph</p>
<h1>Heading 2</h1>
<ul>
  <li>List item</li>
  <li>List item</li>
</ul>
<p>Paragraph<img /></p>
CODE;

解决方案:

// Content array...
$content = array_map(
    function ($element) {
        return preg_replace('/\>\s+\</', '><', $element);
    },
    preg_split('/\<h1\>[^\<]*\<\/h1\>/', $code)
);
array_shift($content);

// Headings array...
preg_match_all('/\<h1\>[^\<]*\<\/h1\>/', $code, $matches);
$headings = $matches[0];

// Result
$result = array(
    'headings' => $headings,
    'content'  => $content,
);
print_r($result);

输出:

Array
(
    [headings] => Array
        (
            [0] => <h1>Heading</h1>
            [1] => <h1>Heading 2</h1>
        )

    [content] => Array
        (
            [0] =>  <p>Paragraph</p><ul><li>List item</li><li>List item</li></ul><p>Paragraph</p>
            [1] =>  <ul><li>List item</li><li>List item</li></ul><p>Paragraph<img /></p>
        )
)

关于php - XPath - 选择特定标签后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12956546/

相关文章:

php - 我可以使用 Laravel/Eloquent 预加载来加入相关表吗?

xpath - 如何选择包含电子邮件的最里面的节点?

Python Scrapy 抓取垃圾值

java - 如何在数据结构中压缩多个字符串?

python - 使用 XPath 解析定义列表的最佳方法是什么?

=importXML() 中的 xpath 用于提取元描述

php - 在 MySQL while 循环中连接另一个数据库

php - 使用php bin2hex函数读取bin文件

php - 使用循环将 JQuery Dropdown list 中的多维数组以字符串形式存储在数据库中

php - 在 PHP 中用于 preg_replace 的分隔符(替换在 PHP 之外但不在 PHP 内部的工作)