简单的HTML Dom支持:有像解析?
问题描述:
我要解析的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)的任何等价物。
答
没有,但这里有一个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);
答
最后,我自己解决它。对于任何寻找解决方案的人来说,这都是我所做的。
$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;
感谢您的advanced_html_dom共享信息。将测试它,并希望它可以像SHD一样快速进行简单解析。标记为接受的答案。如果有人想在simple_html_dom中实现此目的,请保留我自己的答案。 – Gaurav
对于许多选择器来说,AHD看起来很糟糕。现在必须坚持SHD。 – Gaurav
为实际的css选择器破碎?我不这么认为,但如果你这样做,你应该开一个问题。 – pguardiario