Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите с DOMDocument
 
 автор: indexer   (02.07.2015 в 11:27)   письмо автору
 
 

На 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 в 18:45)   письмо автору
 
   для: 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"]


=)

  Ответить  
 
 автор: Igorek   (02.07.2015 в 19:01)   письмо автору
 
   для: 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)); // или с ним

  Ответить  
 
 автор: indexer   (02.07.2015 в 20:33)   письмо автору
 
   для: 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);
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования