запрос xpath для разбора HTML-тегов - PullRequest
1 голос
/ 28 сентября 2010

Мне нужно проанализировать следующий пример HTML-кода, используя запрос xpath.

<td id="msgcontents">
 <div class="user-data">Just seeing if I can post a link... please ignore post
  <a href="http://finance.yahoo.com">http://finance.yahoo.com</a>
 </div>
</td>

<td id="msgcontents">
 <div class="user-data">some text2...
  <a href="http://abc.com">http://abc.com</a>
 </div>
</td>

<td id="msgcontents">
 <div class="user-data">some text3...      
 </div>
</td>

Приведенный выше HTML-код может повторяться n раз на странице.

Также иногда ..... часть может отсутствовать, как показано в приведенных выше HTML-блоках.

Мне нужен синтаксис xpath, чтобы я мог получить проанализированные строки как

 array1[0]= "Just seeing if I can post a link... please ignore post ttp://finance.yahoo.com" 
 array[1]="some text2 htp://abc.com"
 array[2]="sometext3" 

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

Используйте

concat(/td/div/text[1], ' ', /td/div/a)

Вы можете использовать вместо '' выше любой разделитель, который вы хотите, чтобы появлялся между двумя строками.

0 голосов
/ 28 сентября 2010

Может быть что-то вроде следующего:

   $remote = file_get_contents('http://www.sitename.com');
    $dom = new DOMDocument();
    //Error suppression unfortunately, as an invalid xhtml document throws up warnings.
    $file = @$dom->loadHTML($remote);

    $xpath = new DOMXpath($dom);

    //Get all data with the user-data class.
    $userdata = $xpath->query('//*[contains(@class, \'user-data\')]');

    //get links
    $links = $xpath->query('//a/@href');

Таким образом, чтобы получить доступ к одной из этих переменных, вам нужно использовать nodeValue:

$ret = array();
foreach($userdata as $data) {
  $ret[] = $data->nodeValue;
}

Редактировать: Я думал, что упомяну, что это получит все ссылки на данной странице, я полагаю, это то, что вы хотели?

...