0

私が欲しいのは<a>、特定の<td>タグの間にあるHTMLタグの数を取得することです。

例は私が持っているものですが、残りをコードに入れる方法がわかりません。

 $dom = new DOMDocument();
 $dom->loadHTML($text);
 $i = 0;
 foreach($dom->getElementsByTagName("td") as $node){
 //Retrieve every TD tag that have the attribute bgcolor = #0051AB
//<td bgcolor=#0051AB> NODEVALUE </td>
   if($node->getAttribute("bgcolor") == "#0051AB"){
     $cat[]= $node->nodeValue;
   }
//HERE identify every 'a' html tag that are between the $node and the next one!!
//<a href="path">nodeValue</a>


 }

<table><tr><td bgcolor=#0051AB>Project 1</td></tr></table>
<a>link1</a>
other tags and text..
<a>Link 2</a>
enter code here
<table><tr><td bgcolor=#0051AB>Project 2</td></tr></table>
codecodecode
<a>link3</a>
codecodecode

必要な結果:(0 = td nodeValueの名前、1 =次のノードの前のタグの数)

Array => (
   Array[0] => ([0] => Project1, [1] => 2 ),
   Array[1] => ([0] => Project2, [1] => 1 )
)

アドバイスありがとうございます。

4

2 に答える 2

3

この要件には、 PHPDOMよりもQueryPathを使用します。なんで?それは別の議論です。

以下はあなたの問題の解決策です。

QueryPathをダウンロードし、PHPファイルに含めるだけです。

require("../../QueryPath\QueryPath.php");

以下は、解析用のHTMLの例です。

$text="<body>
<table><tr><td bgcolor=#0051AB>Project 1</td></tr></table>
<a>link1</a>
 other tags and text..
<a>Link 2</a>
enter code here
<table><tr><td >Project 2</td></tr></table>
codecodecode
<a> Should Not Be Included</a>
codecodecode
<table><tr><td bgcolor=#0051AB>Project 2</td></tr></table>
codecodecode
<a>link3</a>
codecodecode</body>";

HTMLを解析するコード

 $tags=htmlqp($text,'body')->children();
 $isRequiredTag=false;
 $i=0;
 foreach($tags as $pr)
 {
 $tag= $pr->tag();
 if($tag=='table'){
 $isRequiredTag= (htmlqp($text,$tag)->eq($i)->find('td')-  >attr('bgcolor')=='#0051AB')?"TRUE":"FALSE";
 $i++;
 }

 if ($isRequiredTag=="TRUE" && $tag=='a') echo $pr->text();

 } 
于 2013-02-20T10:30:39.943 に答える