среда, 18 августа 2010 г.

Парсинг HTML, DOM

Свое знакомство с php я начал именно с парсинга, в дальнейшем для облегчения я попробовал использовать Simple HTML DOM Parser. С ним работать очень удобно, но он жрет очень много памяти, и там где происходит много итераций с его участием скрипт завершает свою работу с Fatal error из за не хватки памяти.
 
Вообщем нашел я ему замену, регулярка которая парсит содержимое элемента по указному id или class-у.
Код - пример #1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class ParsDom {

    public $sContent = '';
    
    public function getElement($sId = '', $sElem = 'div') {
        if (!$sId || !$this->sContent) return '';
        $aOut[0] = array();
        $sReg = "
        /
        <{$sElem}[^>]+\b(?:class|id)=[\"\']?{$sId}[\"\']?[^>]*>
         (?:
           (<{$sElem}[^>]*>*?<\/{$sElem}>)|
           .
         )*?
        <\/{$sElem}>
        /xsS";

        preg_match_all($sReg, $this->sContent, $aOut);

        if (isset($aOut[0]))
            return $aOut[0];
        else    
            return '';
    }
}

// Пример
$oParsDom = new ParsDom;

// Контент от куда будем парсить
$oParsDom->sContent = $sData;

// Парсим все DIV элементы с указаным id или классом
$aDiv = $oParsDom->getElement('class_or_id_name');

// Парсим все LI элементы с указаным id или классом
$aLi = $oParsDom->getElement('menu', 'li');

Комментариев нет:

Отправить комментарий