Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Imangazaliev committed Aug 23, 2015
1 parent 5d4812f commit 69ca21c
Showing 1 changed file with 61 additions and 32 deletions.
93 changes: 61 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

DiDOM - простая и быстрая библиотека для парсинга HTML.

##Содержание
## Содержание

- [Установка](#Установка)
- [Быстрый старт](#Быстрый-старт)
Expand All @@ -12,14 +12,15 @@ DiDOM - простая и быстрая библиотека для парси
- [Вывод содержимого](#Вывод-содержимого)
- [Создание нового элемента](#Создание-нового-элемента)
- [Работа с атрибутами элемента](#Работа-с-атрибутами-элемента)
- [Сравнение с другими парсерами](#Сравнение-с-другими-парсерами)

##Установка
## Установка

Для установки DiDOM выполните команду:

composer require imangazaliev/didom

##Быстрый старт
## Быстрый старт

```php
use DiDom\Document;
Expand All @@ -33,11 +34,11 @@ foreach($posts as $post) {
}
```

##Создание нового документа
## Создание нового документа

DiDom позволяет загрузить HTML несколькими способами:

#####Через конструктор
##### Через конструктор

```php
//в первом параметре передается строка с HTML
Expand All @@ -52,7 +53,7 @@ $document = new Document('http://www.example.com/', true);

Второй параметр указывает на то, что загружается файл. По умолчанию - `false`.

#####Через отдельные методы
##### Через отдельные методы

```php
$document = new Document();
Expand All @@ -64,11 +65,11 @@ $document->loadHtmlFile('page.html');
$document->loadHtmlFile('http://www.example.com/');
```

##Поиск элементов
## Поиск элементов

В качестве выражения для можно передать CSS-селектор или XPath-путь. Для этого в первом параметре нужно передать само выражение, а во втором - его тип (по умолчанию - `Query::TYPE_CSS`):

#####Через метод `find()`:
##### Через метод `find()`:

```php
use DiDom\Document;
Expand All @@ -83,13 +84,13 @@ $posts = $document->find('.post');
$posts = $document->find('//div[contains(@class, 'post')]', Query::TYPE_XPATH);

This comment has been minimized.

Copy link
@greabock

greabock Aug 23, 2015

двойные кавычки
"//div[contains(@Class, 'post')]"

или экранирование
'//div[contains(@Class, 'post')]'

```

#####Через магический метод `__invoke()`:
##### Через магический метод `__invoke()`:

```php
$posts = $document('.post');
```

#####Через метод `xpath()`:
##### Через метод `xpath()`:

```php
$posts = $document->xpath("//*[contains(concat(' ', normalize-space(@class), ' '), ' post ')]");
Expand All @@ -103,7 +104,7 @@ echo $document->find('.post')[0]->find('h2')[0]->text();

Если элементы, соответствующие заданному выражению, найдены, вернется массив с экземплярами `DiDom\Element`, иначе - пустой массив.

###Проверка наличия элемента
### Проверка наличия элемента

Проверить наличие элемента можно с помощью метода `has()`:

Expand Down Expand Up @@ -132,32 +133,32 @@ if (count($elements = $document->find('.post')) != 0) {

т.к. в первом случае выполняется два запроса.

##Вывод содержимого
## Вывод содержимого

###Получение HTML
### Получение HTML

#####Через метод `html()`:
##### Через метод `html()`:

```php
$posts = $document->find('.post');

echo $posts[0]->html();
```
#####Приведение к строке:
##### Приведение к строке:

```php
$html = (string) $posts[0];
```

###Получение содержимого
### Получение содержимого

```php
$posts = $document->find('.post');

echo $posts[0]->text();
```

##Создание нового элемента
## Создание нового элемента

```php
use DiDom\Element;
Expand All @@ -170,68 +171,96 @@ echo $element->html();

Первым параметром передается название элемента, вторым - его значение (необязательно).

##Работа с атрибутами элемента
## Работа с атрибутами элемента

####Создание/изменение атрибута
#### Получение названия элемента
```php
$name = $element->tag;
```

#####Через метод `setAttribute`:
#### Создание/изменение атрибута

##### Через метод `setAttribute`:
```php
$element->setAttribute('name', 'username');
```

#####Через метод `attr`:
##### Через метод `attr`:
```php
$element->attr('name', 'username');
```

#####Через магический метод `__set`:
##### Через магический метод `__set`:
```php
$element->name = 'username';
```

####Получение значения атрибута
#### Получение значения атрибута

#####Через метод `getAttribute`:
##### Через метод `getAttribute`:
```php
$username = $element->getAttribute('value');
```

#####Через метод `attr`:
##### Через метод `attr`:
```php
$username = $element->attr('value');
```

#####Через магический метод `__get`:
##### Через магический метод `__get`:
```php
$element->name = 'username';
```

Если атрибут не найден, вернет `null`.

####Проверка наличия атрибута
#### Проверка наличия атрибута

#####Через метод `hasAttribute`:
##### Через метод `hasAttribute`:
```php
if ($element->hasAttribute('name')) {
//код
}
```

#####Через магический метод `__isset`:
##### Через магический метод `__isset`:
```php
if (isset($element->name)) {
//код
}
```

####Удаление атрибута:
#### Удаление атрибута:

#####Через метод `removeAttribute`:
##### Через метод `removeAttribute`:
```php
$element->removeAttribute('name');
```

#####Через магический метод `__unset`:
##### Через магический метод `__unset`:
```php
unset($element->name);
```

## Работа с кэшем
Кэш - массив XPath-выражений, полученных из CSS.
#### Получение кэша
```php
use DiDom\Document;
use DiDom\Query;

...

$xpath = Query::compile('h2');

//array('h2' => '//h2')
$compiled = Query::getCompiled();
```
#### Установка кэша
```php
Query::setCompiled(['h2' => '//h2']);
```

## Сравнение с другими парсерами

[Сравнение с другими парсерами](https://github.com/Imangazaliev/DiDOM/wiki/Сравнение-с-другими-парсерами)

0 comments on commit 69ca21c

Please sign in to comment.