2017-09-09 35 views
0

我要解析的HTML结构是这样的:简单的HTML Dom支持:有像解析?

<div class='container> 
    <div class='inner-div'> 
     <span class='text'>...</span> 
     <div class='author'> 
      <span data-author='Alpha'>...</span> 
     </div> 
     <div class='summary'> 
      <span data-summary='Exclusive'>Text 1</span> 
     </div> 
    </div> 
    <div class='inner-div'> 
     <span class='text'>...</span> 
     <div class='author'> 
      <span data-author='Beta'>...</span> 
     </div> 
     <div class='summary'> 
      <span data-summary='Non-Exclusive'>Text 2</span> 
     </div> 
    </div> 
    <div class='inner-div'> 
     <span class='text'>...</span> 
     <div class='author'> 
      <span data-author='Gamma'>...</span> 
     </div> 
     <div class='summary'> 
      <span data-summary='Exclusive'>Text 3</span> 
     </div> 
    </div> 
    <div class='inner-div'> 
     <span class='text'>...</span> 
     <div class='author'> 
      <span data-author='Delta'>...</span> 
     </div> 
     <div class='summary'> 
      <span data-summary='Non-Exclusive'>Text 4</span> 
     </div> 
    </div> 
    ... 
    <div class='inner-div'> 
     <span class='text'>...</span> 
     <div class='author'> 
      <span data-author='Zeta'>...</span> 
     </div> 
     <div class='summary'> 
      <span data-summary='Exclusive'>Text 5</span> 
     </div> 
    </div> 
</div> 

我希望获得的第一个“独家”总结,其中作者是不是“阿尔法”。在上面的例子中,它将是'文本3'。我怎样才能解析这个使用简单的HTML DOM甚至XML DOM?

附录:我正在寻找使用PHP Simple HTML Dom库解析HTML。我知道如何在jQuery中解析它,但Simple HTML Dom库似乎不支持(:has)的任何等价物。

回答

0

没有,但这里有一个simple html dom replacement that做(你想要的:has:not代替BTW):

include_once('advanced_html_dom.php'); 

$html = str_get_html($str); 

echo $html->find('.author:not(> [data-author=Alpha]) ~ .summary > [data-summary=Exclusive]', 0); 
+0

感谢您的advanced_html_dom共享信息。将测试它,并希望它可以像SHD一样快速进行简单解析。标记为接受的答案。如果有人想在simple_html_dom中实现此目的,请保留我自己的答案。 – Gaurav

+0

对于许多选择器来说,AHD看起来很糟糕。现在必须坚持SHD。 – Gaurav

+0

为实际的css选择器破碎?我不这么认为,但如果你这样做,你应该开一个问题。 – pguardiario

0

最后,我自己解决它。对于任何寻找解决方案的人来说,这都是我所做的。

$node = $html->find("span[data-summary='Exclusive']",0); 
if ($node->parent()->parent()->find('div.author span',0)['data-author'] == 'Alpha') { 
    $node = $html->find("span[data-summary='Exclusive']",1); 
} 
return $node->innertext;