Php Simple HTML DOM Parser - 如何使用块重复

时间:2017-03-29 18:10:49

标签: php parsing dom foreach simple-html-dom

我有<h2>块,但没有属性。之后转到<p>没有属性的块。

这种结构看起来像这样:

<h2></h2>
<p></p>
<p></p>
<p></p>
<h2></h2>
<p></p>
<p></p>
<h2></h2>
<p></p>

我正在使用Php Simple HTML DOM Parser。我希望从<h2>块获取数据,之后将所有<p>转换为另一个<h2>,依此类推。

但是所有<h2>都必须连接到跟随它们的<p>。我想使用key => value(示例<h2> => <p>,<p>,...和另一个<h2>),但我不知道该怎么做。

另外,我知道next_sibling(),但不知道如何在循环中使用它。我做了两个变量,第一个是<h2>,第二个是<p>。我认为这对我的目标很有用。这是代码:

$test = file_get_html('url');
foreach($test->find('h2') as $test2) {
  echo $test2 . '<br>';
  foreach($test->find('p') as $test3) {
    echo $test3 .'<br>';
  }
}

2 个答案:

答案 0 :(得分:1)

目前还不是很清楚你在寻找什么,但这里有一个让你入门的想法:

List<Label[]> labels;//your labels 

Label[] firstArray=labels[0];
Label[] secondArray=labels[1];
...

Label firstLabelInFirstArray=firstArray[0]; //get first label
Label secondLabelInFirstArray=firstArray[1]; //get second label

firstLabelInFirstArray.Visible=true; //In Windows Forms
firstLabelInFirstArray.Visibility=Visibility.Hidden; //In WPF

答案 1 :(得分:0)

在这里回答我的问题。我希望它可以帮助某人!)

 `foreach ($html->find('.div') as $div)
    {
        if(!$next=$div->next_sibling()) continue;
            if($next->tag==='h2')
            {
                $h2 =$next;
                echo $h2;

                while ($h2 = $h2->next_sibling())
                {
                    if(!$h2->tag=='p') break;
                    {
                        $p =$h2;
                        echo $p;  
                    }     
                }
                while ($h2 = $h2->next_sibling())
                {
                    if(!$h2->tag=='table') break;
                    {
                        $tab =$h2;
                        echo $tab;
                    }     
                }
                while ($h2 = $h2->next_sibling())
                {
                    if(!$h2->tag=='ul') break;
                    {
                        $ul =$h2;
                        echo $ul;
                    }     
                }
            }
            else continue;
    }`