如何使用 php 中的 DOM 解析器为 h1、h2 等创建 <div>?
How to create <div> for h1,h2 and so on using DOM parser in php?
HTML
<h1>heading 1</h1>
<h2>heading 2</h2>
<h1>heading 1</h1>
<h2>heading 2</h2>
<h3>heading 3</h3>
预期输出
<div class="sect1">
<h1>heading 1</h1>
<div class="sect2">
<h2>heading 2</h2>
</div>
</div>
<div class="sect1">
<h1>heading 1</h1>
<div class="sect2">
<h2>heading 2</h2>
<div class="sect3">
<h3>heading 3</h3>
</div>
</div>
</div>
我需要用 div
和它们各自的 class 包装 h
标签。我如何使用 php 中的 DOM 解析器来做到这一点?由于我不了解 DOM 解析器 class 我不知道如何开始。
我试过了,
$doc = new DOMDocument();
$doc->loadHTML($input);
$div = $doc->createElement("div");
$div->setAttribute('class', 'sect1');
$h1= $doc->getElementsByTagName('h1');
$div->appendChild($h1);
??????
$dom = new DOMDocument();
$dom->loadHTML('
<h1>heading 1</h1>
<h2>heading 2</h2>
<h1>heading 1</h1>
<h2>heading 2</h2>
<h3>heading 3</h3>
');
/** @var DOMElement $element */
$elements = $dom->getElementsByTagName('*');
$domResult = new DOMDocument();
$need = array('h1', 'h2', 'h3'/*...*/);
/** @var DOMElement $h */
for ($i = 0; $i < $elements->length; $i++) {
/** @var DOMElement $element */
$element = $elements->item($i);
if (in_array($element->tagName, $need)) {
$wrap = $domResult->createElement('div');
$wrap->setAttribute('class', 'sect1');
$element = $domResult->createElement($element->tagName, $element->textContent);
$wrap->appendChild($element);
$domResult->appendChild($wrap);
}
}
echo $domResult->saveHTML();
HTML
<h1>heading 1</h1>
<h2>heading 2</h2>
<h1>heading 1</h1>
<h2>heading 2</h2>
<h3>heading 3</h3>
预期输出
<div class="sect1">
<h1>heading 1</h1>
<div class="sect2">
<h2>heading 2</h2>
</div>
</div>
<div class="sect1">
<h1>heading 1</h1>
<div class="sect2">
<h2>heading 2</h2>
<div class="sect3">
<h3>heading 3</h3>
</div>
</div>
</div>
我需要用 div
和它们各自的 class 包装 h
标签。我如何使用 php 中的 DOM 解析器来做到这一点?由于我不了解 DOM 解析器 class 我不知道如何开始。
我试过了,
$doc = new DOMDocument();
$doc->loadHTML($input);
$div = $doc->createElement("div");
$div->setAttribute('class', 'sect1');
$h1= $doc->getElementsByTagName('h1');
$div->appendChild($h1);
??????
$dom = new DOMDocument();
$dom->loadHTML('
<h1>heading 1</h1>
<h2>heading 2</h2>
<h1>heading 1</h1>
<h2>heading 2</h2>
<h3>heading 3</h3>
');
/** @var DOMElement $element */
$elements = $dom->getElementsByTagName('*');
$domResult = new DOMDocument();
$need = array('h1', 'h2', 'h3'/*...*/);
/** @var DOMElement $h */
for ($i = 0; $i < $elements->length; $i++) {
/** @var DOMElement $element */
$element = $elements->item($i);
if (in_array($element->tagName, $need)) {
$wrap = $domResult->createElement('div');
$wrap->setAttribute('class', 'sect1');
$element = $domResult->createElement($element->tagName, $element->textContent);
$wrap->appendChild($element);
$domResult->appendChild($wrap);
}
}
echo $domResult->saveHTML();