2017-09-09 4 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> 

私は著者が「アルファ」ではありません最初の「独占」の要約を取得したいです。上記の例では、 'Text 3'になります。どのように私は単純なHTML DOMまたはXML DOMを使用してこれを解析することができますか?

追加:PHP Simple HTML Domライブラリを使用してHTMLを解析しようとしています。私はjQueryでそれを解析する方法を知っていますが、シンプルなHTML Domライブラリは、(:has)と同等のものをサポートしていないようです。

答えて

0

ありませんが、ここでsimple html dom replacement thatだ(あなたがところで:not代わりの:hasをしたい)が行われます。advanced_html_dom上の情報を共有するための

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

感謝を。それをテストし、シンプルな解析のために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; 
関連する問題