|
|
|
| На html странице в кодировке win-1251 есть повторяющиеся блоки.
<div class="reportsLine status_SUCCESS" data-container-name="item">
<i class="icon icon_SUCCESS fa fa-check-circle"></i>
<i class="icon icon_ERROR fa fa-times-circle"></i>
<i class="icon icon_PROCESSED fa fa-clock-o"></i>
<div class="DateWithTransaction">
<span class="date">
01.01.2001
</span>
<span class="time">
00:00:00
</span>
<div class="transaction">
67856785
</div>
</div>
<div class="IncomeWithExpend income">
<div class="cash">
1,00
руб.
</div>
<div class="commission">
</div>
</div>
<div class="originalExpense">
<span>
1,00
руб.
</span>
</div>
<div class="ProvWithComment">
<div class="provider">
<span>Буквэ Буквэ Буквэ Буквэ</span>
<span class="opNumber">4556</span>
</div>
<div class="comment">Бла бла бла</div>
</div>
<div class="clearBoth"></div>
<div class="cashback-wrap">
</div>
<div class="clearBoth"></div>
<div class="extra" data-container-name="item-extra">
<div class="item">
<span class="key">Транзакция:</span>
<span class="value">67856785</span>
</div>
</div>
</div>
|
как используя dom добраться до значений? Не нравится мне как работает регулярка.
Сейчас парсится так
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
@$dom-> loadHTML('<?xml encoding="UTF-8">'. $page );
$xpath = new DOMXPath($dom);
$dom -> preserveWhiteSpace = false;
$dom -> strictErrorChecking = false;
$dom -> validateOnParse = true;
foreach($xpath->query('//div[@class="reportsLine status_SUCCESS"]') as $tag) {
echo $tag->nodeValue;
}
|
Но приходится прогонять $tag->nodeValue через функцию которая дополнительно вычищает лишнее по регуляркам. | |
|
|
|
|
|
|
|
для: indexer
(02.07.2015 в 11:27)
| | Никто не знает?
может подскажите как выполнить foreach по таким xpath и как выполнить запрос от родительского xpath
//div[@class="reportsLine status_SUCCESS"] /*parent*/
//div[@class="reportsLine status_SUCCESS"]/div[@class="DateWithTransaction"]/span[@class="date"]
//div[@class="reportsLine status_SUCCESS"]/div[@class="DateWithTransaction"]/span[@class="time"]
//div[@class="reportsLine status_SUCCESS"]/div[@class="DateWithTransaction"]/div[@class="transaction"]
//div[@class="reportsLine status_SUCCESS"]/div[@class="originalExpense"]/span
//div[@class="reportsLine status_SUCCESS"]/div[@class="IncomeWithExpend income"]/div[@class="cash"]
//div[@class="reportsLine status_SUCCESS"]/div[@class="ProvWithComment"]/div[@class="comment"]
|
=) | |
|
|
|
|
|
|
|
для: indexer
(02.07.2015 в 18:45)
| | а парент здесь нужен?
<?php
$parent = $xpath->query('//div[@class="reportsLine status_SUCCESS"]')->item(0);
var_dump(trim($xpath->query('//div[@class="DateWithTransaction"]/span[@class="date"]')->item(0)->nodeValue)); // можно и без парента
var_dump(trim($xpath->query('div[@class="DateWithTransaction"]/span[@class="date"]', $parent)->item(0)->nodeValue)); // или с ним
|
| |
|
|
|
|
|
|
|
для: Igorek
(02.07.2015 в 19:01)
| | Спасибо добрый человек. Все получилось.
<?php
foreach($xpath->query('//div[@class="reportsLine status_SUCCESS"]') as $tag) {
@$p[0] = trim($xpath->query('div[@class="DateWithTransaction"]/span[@class="date"]',$tag)->item(0)->nodeValue);
@$p[1] = trim($xpath->query('div[@class="DateWithTransaction"]/span[@class="time"]',$tag)->item(0)->nodeValue);
@$p[2] = trim($xpath->query('div[@class="DateWithTransaction"]/div[@class="transaction"]',$tag)->item(0)->nodeValue);
@$p[3] = trim($xpath->query('div[@class="originalExpense"]/span',$tag)->item(0)->nodeValue);
@$p[4] = trim($xpath->query('div[@class="IncomeWithExpend income"]/div[@class="cash"]',$tag)->item(0)->nodeValue);
@$p[5] = trim($xpath->query('div[@class="ProvWithComment"]/div[@class="comment"]',$tag)->item(0)->nodeValue);
print_r($p);
}
|
| |
|
|
|