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
Форумы портала PHP.SU :: Версия для печати :: Заменить ссылки и вырезать список
Форумы портала PHP.SU » » XML и его обработка » Заменить ссылки и вырезать список

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

1. tenebrosus - 28 Мая, 2014 - 21:20:14 - перейти к сообщению
Доброго всем!

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. Вырезать! весь список идущий после слов "Дополнительные характеристики" и записать в новую переменную?
2. duhon - 02 Июня, 2014 - 16:29:46 - перейти к сообщению
если ключевые слова проблемы "html,сложно,regex" то нужно загуглить "php html parser"
а уже после, простые задачи доработать с помощью регулярок. Исключение если это принципиально или жесткое условие.
3. tenebrosus - 03 Июня, 2014 - 22:34:41 - перейти к сообщению
Со ссылками помогли на другом форуме. Вот нагуглил.. http://simplehtmldom[dot]sourceforge[dot]net/ . Все равно кукушки не хватает.. Можно найти элемент в DOMе, но как найти элемент, идущий после определенных слов, без id-шника, содержащий внутри неодинаковую инфу, вырезать его и записать в новую переменную..
4. armancho7777777 - 03 Июня, 2014 - 23:59:13 - перейти к сообщению
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;
5. tenebrosus - 04 Июня, 2014 - 10:53:48 - перейти к сообщению
Спасибо, но Не работает(.
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.  ?>


Со ссылками разобрались- помогли.. А вот список вырезать не получацца никак..
6. armancho7777777 - 04 Июня, 2014 - 16:18:18 - перейти к сообщению
tenebrosus пишет:
но Не работает(.

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

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


Это у Вас с руками что-то...
7. tenebrosus - 07 Июня, 2014 - 10:50:20 - перейти к сообщению
Я Дико Извиняюсь! Действительно у меня сруками). В notepad забыл кодировку UTF8 указать.. Все работает, Спасибо!

 

Powered by ExBB FM 1.0 RC1