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

Форум Регулярные Выражения

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

 

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

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

тема: Как разобрать XML-файл?
 
 автор: Shorr Kan   (23.09.2005 в 04:48)   письмо автору
 
 

- <record>
- <title>
- <![CDATA[ слова  ]]> 
  </title>
- <desc>
- <![CDATA[ слова  ]]> 
  </desc>
- <url>
- <![CDATA[ слова  ]]> 
  </url>
- <cl>
- <![CDATA[ слова  ]]> 
  </cl>
  <bol show="1">слова </bol> 
  </record>



Причем, записей record - много. Собственно, мне нужно получить в цикле в массив "слова". Ну и на каждом кругу цикла - новую запись record

Все мои попытки угадывания регугялярных - не дали успеха. Хотелось бы только на них - без xml.

   
 
 автор: cheops   (23.09.2005 в 14:41)   письмо автору
 
   для: Shorr Kan   (23.09.2005 в 04:48)
 

А тире тоже присутствуют напротив тэгов?

   
 
 автор: Shorr Kan   (23.09.2005 в 15:45)   письмо автору
 
   для: cheops   (23.09.2005 в 14:41)
 

Нет, тире нет. Это яваскриптовые проделки. Чистые теги. С грязнотой внутри. Вот она и нужна... Разумеется, <![CDATA[ - тоже НЕ нужно, как и теги.

   
 
 автор: cheops   (23.09.2005 в 15:49)   письмо автору
 
   для: Shorr Kan   (23.09.2005 в 15:45)
 

А вы бы не могли бы прикрепить к сообщению реальный кусочек этого XML-файла?

   
 
 автор: Shorr Kan   (23.09.2005 в 16:11)   письмо автору
 
   для: cheops   (23.09.2005 в 15:49)
 

Там не получается взять исходник файла... Я вам кусочек кода на почту (не хотелось бы ссылку тут писать) пошлю - сами увидите.

   
 
 автор: cheops   (23.09.2005 в 23:53)   письмо автору
 
   для: Shorr Kan   (23.09.2005 в 16:11)
 

Можно поступить примерно следующим образом
<?php 
  $text 
file_get_contents('xml.txt'); 
  
// Подсчитываем число тэгов в строке 
  
$number substr_count($text,"[quote='"); 
  
// Осуществляем замену 
  
$pattern "|<record>[\s]*<title><!\[CDATA\[([^\]]+)\]\]></title>[\s]*<description><!\[CDATA\[([^\]]+)\]\]></description>[\s]*<url><!\[CDATA\[([^\]]+)\]\]></url>[\s]*<clickurl><!\[CDATA\[([^\]]+)\]\]></clickurl>[\s]*<clickurl>|isU"
  
preg_match_all($pattern$text$out); 
  echo 
"<pre>";
  
print_r($out); 
  echo 
"</pre>";
?>

   
 
 автор: Shorr Kan   (24.09.2005 в 09:14)   письмо автору
 
   для: cheops   (23.09.2005 в 23:53)
 

А я еще предположил, что регулярки начал понимать... И все же - не работает. Примите почту.

   
 
 автор: cheops   (24.09.2005 в 12:13)   письмо автору
 
   для: Shorr Kan   (24.09.2005 в 09:14)
 

Хм... т.е. не везде имеется тэг <title>? Тогда лучше вытащить информацию в два приёма
<?php
  $text 
file_get_contents('xml.txt'); 
  
$pattern "|<record>[\s]*<title><!\[CDATA\[([^\]]+)\]\]></title>[\s]*|isU"
  
preg_match_all($pattern$text$out); 
  echo 
"<pre>"
  
print_r($out); 
  echo 
"</pre>"
  
$pattern "|<description><!\[CDATA\[([^\]]+)\]\]></description>[\s]*<url><!\[CDATA\[([^\]]+)\]\]></url>[\s]*[\s]*<clickurl><!\[CDATA\[([^\]]+)\]\]></clickurl>[\s]*|isU"
  
preg_match_all($pattern$text$out); 
  echo 
"<pre>"
  
print_r($out); 
  echo 
"</pre>"
?>

   
 
 автор: Shorr Kan   (25.09.2005 в 02:03)   письмо автору
 
   для: cheops   (24.09.2005 в 12:13)
 

Да, кажется сработало. Только я не понял, как распределились результаты... Массив получился двумерный, но что в нем к чему относится? $out[x][0] - это к первому результату, $out[x][1] - ко второму... или наоборот $out[0][x] ?..

   
 
 автор: cheops   (25.09.2005 в 13:40)   письмо автору
 
   для: Shorr Kan   (25.09.2005 в 02:03)
 

По первому варианту
$out[x][0] - первый результат
$out[x][1] - второй результат
$out[x][3] - третий результат
$out[x][4] - четвёртый результат

   
 
 автор: Shorr Kan   (26.09.2005 в 06:51)   письмо автору
 
   для: cheops   (25.09.2005 в 13:40)
 

Да, все отлично. Спасибо большое.

   
Rambler's Top100
вверх

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