【问题标题】:What's wrong in my DOM parser php code?我的 DOM 解析器 php 代码有什么问题?
【发布时间】:2015-05-29 11:56:10
【问题描述】:

HTML

$html='<h1>some text<h1>
sometext
<h2>some text</h2>
sometext
<h1>some text<h1>
sometext
<h2>some text</h2>
sometext
<h3>some text</h3>
sometext';

我需要用div 包装h 标签。父子关系就像 h1->h2->h3 等等。所以,我需要根据它来包装 div

$dom = new DOMDocument();
$dom->loadHTML($html);
$elements = $dom->getElementsByTagName('*');

        for ($i = 0; $i < $elements->length; $i++) {            
        $element = $elements->item($i);
        if ($element->tagName == 'h1'){ 
           $wrap1 = $dom->createElement('div');
           $wrap1->setAttribute('class', 'sect1');

            $wrap1->appendChild($element);
            $dom->appendChild($wrap1);
        }
        if ($element->tagName == 'h2'){ 
           $wrap2 = $dom->createElement('div');
           $wrap2->setAttribute('class', 'sect2');

            $wrap2->appendChild($element);
            $wrap1->appendChild($wrap2);
            $dom->appendChild($wrap1);
        }
    }     

echo $dom->saveHTML();

我的代码出了点问题,当我尝试执行时,它一直在加载而不提供输出,而且我不确定这段代码是否会得到我的预期输出,如下所示

<div class="sect1">
<h1>some text<h1>
sometext
<div class="sect2">
<h2>some text</h2>
sometext
</div>
</div>
<div class="sect1">
<h1>some text<h1>
sometext
<div class="sect2">
<h2>some text</h2>
sometext
<div class="sect3">
<h3>some text</h3>
 sometext
</div>
</div>
</div>

【问题讨论】:

  • 你做过调试吗?结果如何?
  • 不,我还没有调试。我想知道这段代码是否正确以获得我的预期输出
  • 这是不正确的,如果你想确切地知道:)
  • 是的,我也想知道@Sergei Kovalenko
  • 你真的想要不只是添加一个孩子,而是将纯文本转换为树结构。这是更艰巨的任务

标签: php html dom html-parsing


【解决方案1】:

问题出在这里:

for ($i = 0; $i < $elements->length; $i++) { 
------------------^^^^^^^^^^^^^^^^^^

您每次都在添加新项目,结果是无限循环。你可以这样解决:

for ($i = 0, $count = $elements->length; $i < $count; $i++) {     

【讨论】:

  • 耶..非常感谢
  • 或者$elements-&gt;length 可以分配给循环外的变量:$iNumElements = $elements-&gt;length; for($i=0; $i&lt;$iNumElements; $i++) { ... }
  • 还有一个查询,结果是附加在 html 的末尾,而不是替换现有的 html 代替 h 标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多