PHP Xpath – 解析平面HTML结构
发布时间:2020-12-13 16:22:29 所属栏目:PHP教程 来源:网络整理
导读:我试图解析一些相当平坦的 HTML并将所有内容从一个h1标签分组到下一个标签.例如,我有以下HTML: h1 Heading 1 /h1p Paragraph 1.1 /pp Paragraph 1.2 /pp Paragraph 1.3 /ph1 Heading 2 /h1p Paragraph 2.1 /pp Paragraph 2.2 /ph1 Heading 3 /h1p Paragraph
我试图解析一些相当平坦的
HTML并将所有内容从一个h1标签分组到下一个标签.例如,我有以下HTML:
<h1> Heading 1 </h1> <p> Paragraph 1.1 </p> <p> Paragraph 1.2 </p> <p> Paragraph 1.3 </p> <h1> Heading 2 </h1> <p> Paragraph 2.1 </p> <p> Paragraph 2.2 </p> <h1> Heading 3 </h1> <p> Paragraph 3.1 </p> <p> Paragraph 3.2 </p> <p> Paragraph 3.3 </p> 我基本上希望它看起来像: <div id='1'> <h1> Heading 1 </h1> <p> Paragraph 1.1 </p> <p> Paragraph 1.2 </p> <p> Paragraph 1.3 </p> </div> <div id='2'> <h1> Heading 2 </h1> <p> Paragraph 2.1 </p> <p> Paragraph 2.2 </p> </div> <div id='3'> <h1> Heading 3 </h1> <p> Paragraph 3.1 </p> <p> Paragraph 3.2 </p> <p> Paragraph 3.3 </p> </div> 甚至可能不值得发布我到目前为止所做的代码,因为它只是变得一团糟.基本上我试图为’// h1’做一个Xpath查询.创建新的DIV标记作为父节点.然后将h1 DOM节点复制到第一个DIV中,然后遍历nextSibling,直到我点击另一个h1标签 – 如上所述它变得混乱. 有人能指点我在这里更好的方向吗? 解决方法
迭代在同一级别上的所有节点(我在示例中创建了一个名为platau的提示节点),每当你在< h1>上运行时,在之前插入div并保持对它的引用.
对于< h1>和任何其他节点,如果引用存在,删除节点并将其作为子节点添加到引用. 例: $doc->loadXML($xml); $xp = new DOMXPath($doc); $current = NULL; $id = 0; foreach($xp->query('/platau/node()') as $i => $sort) { if (isset($sort->tagName) && $sort->tagName === 'h1') { $current = $doc->createElement('div'); $current->setAttribute('id',++$id); $current = $sort->parentNode->insertBefore($current,$sort); } if (!$current) continue; $sort->parentNode->removeChild($sort); $current->appendChild($sort); } Demo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |