我试图将 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/