2017-09-09 76 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;