Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Заменить ссылки и вырезать список

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
tenebrosus
Отправлено: 28 Мая, 2014 - 21:20:14
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Доброго всем!

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     $text= "
  3.    <h1>Основные характеристики</h1>
  4.    <ul>
  5.        <li>а</li>
  6.        <li>б</li>
  7.        <li>в</li>
  8.    </ul>
  9.    <h1>Дополнительные характеристики</h1>
  10.    <ul>
  11.        <li>г</li>
  12.        <li>д</li>
  13.        <li>е</li>
  14.    </ul>
  15.    <a href='/1/rashodnye-materialy/kartridzh-epson-c13t11164a10'>Картридж epson-c13t11164a10</a>
  16.    <a href='/1/rashodnye-materialy/kartridzh-canon-b6411v11d11'>Картридж canon-b6411v11d11</a>
  17.    
  18.    <p>Какой-то текст</p>
  19.    <h1>Расходные материалы</h1>
  20.    <ul>
  21.        <li>ё</li>
  22.        <li>ж</li>
  23.        <li>з</li>
  24.    </ul>
  25.    "
  26. ?>


Подскажите плиз! как
1. Привести все ссылки к виду: <a href='/catalog/name-of-cartridge.html'>Название картриджа</a>

и 2. Вырезать! весь список идущий после слов "Дополнительные характеристики" и записать в новую переменную?
 
 Top
duhon
Отправлено: 02 Июня, 2014 - 16:29:46
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Нояб. 2011  


Помог: 5 раз(а)




если ключевые слова проблемы "html,сложно,regex" то нужно загуглить "php html parser"
а уже после, простые задачи доработать с помощью регулярок. Исключение если это принципиально или жесткое условие.
 
 Top
tenebrosus
Отправлено: 03 Июня, 2014 - 22:34:41
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Со ссылками помогли на другом форуме. Вот нагуглил.. http://simplehtmldom[dot]sourceforge[dot]net/ . Все равно кукушки не хватает.. Можно найти элемент в DOMе, но как найти элемент, идущий после определенных слов, без id-шника, содержащий внутри неодинаковую инфу, вырезать его и записать в новую переменную..
 
 Top
armancho7777777 Супермодератор
Отправлено: 03 Июня, 2014 - 23:59:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




tenebrosus пишет:
Вот нагуглил..

Какашка.

Берём это решение и работаем:

PHP:
скопировать код в буфер обмена
  1. include('parseHtml.php');
  2. $html = parseHtml($html);
  3.  
  4. foreach($html->xPath('//a[@href]') as $link) {
  5.     $link->setAttribute('href', '/catalog/name-of-cartridge.html');
  6. }
  7.  
  8. $str = 'Дополнительные характеристики';
  9. $query = "//ul[./preceding-sibling::h1[1][contains(string(), '{$str}')]]";
  10. $result = array();
  11.  
  12. foreach($html->xPath($query) as $htmlList) {
  13.     $result[] = (string)$htmlList->parentNode->removeChild($htmlList);
  14. }
  15.  
  16. print_r($result);
  17. echo $html;
 
 Top
tenebrosus
Отправлено: 04 Июня, 2014 - 10:53:48
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Спасибо, но Не работает(.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $text= "
  4.   <h1>Основные характеристики</h1>
  5.   <ul>
  6.       <li>а</li>
  7.       <li>б</li>
  8.       <li>в</li>
  9.   </ul>
  10.   <h1>Дополнительные характеристики</h1>
  11.   <ul>
  12.       <li>г</li>
  13.       <li>д</li>
  14.       <li>е</li>
  15.   </ul>
  16.   <a href='/1/rashodnye-materialy/kartridzh-epson-c13t11164a10'>Картридж epson-c13t11164a10</a>
  17.   <a href='/1/rashodnye-materialy/kartridzh-canon-b6411v11d11'>Картридж canon-b6411v11d11</a>
  18.  
  19.   <p>Какой-то текст</p>
  20.   <h1>Расходные материалы</h1>
  21.   <ul>
  22.       <li>ё</li>
  23.       <li>ж</li>
  24.       <li>з</li>
  25.   </ul>
  26.   ";
  27. include('parseHtml.php');
  28. $html = parseHtml($text);
  29.  
  30. foreach($html->xPath('//a[@href]') as $link) {
  31.     $link->setAttribute('href', '/catalog/name-of-cartridge.html');
  32. }
  33.  
  34. $str = 'Дополнительные характеристики';
  35. $query = "//ul[./preceding-sibling::h1[1][contains(string(), '{$str}')]]";
  36. $result = array();
  37.  
  38. foreach($html->xPath($query) as $htmlList) {
  39.     $result[] = (string)$htmlList->parentNode->removeChild($htmlList);
  40. }
  41.  
  42. print_r($result);
  43. echo $html;?>


выводит:http://prntscr[dot]com/3pik73

Надо чтобы стало так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     $text= "
  3.   <h1>Основные характеристики</h1>
  4.   <ul>
  5.       <li>а</li>
  6.       <li>б</li>
  7.       <li>в</li>
  8.   </ul>
  9.   <h1>Дополнительные характеристики</h1>
  10.   <a href='/catalog/kartridzh-epson-c13t11164a10.html'>Картридж epson-c13t11164a10</a>
  11.   <a href='/catalog/kartridzh-canon-b6411v11d11.html'>Картридж canon-b6411v11d11</a>
  12.  
  13.   <p>Какой-то текст</p>
  14.   <h1>Расходные материалы</h1>
  15.   <ul>
  16.       <li>ё</li>
  17.       <li>ж</li>
  18.       <li>з</li>
  19.   </ul>
  20. "
  21. $additional= "
  22.   <ul>
  23.       <li>г</li>
  24.       <li>д</li>
  25.       <li>е</li>
  26.   </ul>"
  27.  ?>


Со ссылками разобрались- помогли.. А вот список вырезать не получацца никак..

(Отредактировано автором: 04 Июня, 2014 - 10:54:58)

 
 Top
armancho7777777 Супермодератор
Отправлено: 04 Июня, 2014 - 16:18:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




tenebrosus пишет:
но Не работает(.

Перед тем как выложить код, я его протестировал. Он рабочий.

Нажмите для увеличения


Это у Вас с руками что-то...
 
 Top
tenebrosus
Отправлено: 07 Июня, 2014 - 10:50:20
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Я Дико Извиняюсь! Действительно у меня сруками). В notepad забыл кодировку UTF8 указать.. Все работает, Спасибо!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« XML и его обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB