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]   

> Описание: По сути поиск содержимого элемента по атрибуту
perezzloy
Отправлено: 04 Апреля, 2014 - 17:56:03
Post Id


Новичок


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


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




Есть xml-файл:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <razdel_list>
  2.         <razdel id="1" name="Имя первого раздела">
  3.                 <about>Описание первого раздела</about>
  4.         </razdel>
  5.         <razdel id="2" name="Имя второго раздела">
  6.                 <about>Описание второго раздела</about>
  7.         </razdel>
  8. </razdel_list>

Мне надо написать функцию, которая принимала бы id раздела, а возвращала бы массив с именем этого раздела и описанием.
Наверное это совсем не сложно, но я раньше не сталкивался с xml и поэтому туплю. Читал, искал, все равно не пойму. Подскажите, пожалуйста, как реализовать это?
Лучше через SimpleXML, эта либа мне показалась более простой.
 
 Top
perezzloy
Отправлено: 04 Апреля, 2014 - 20:02:44
Post Id


Новичок


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


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




Ну или как вариант можно так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <razdel_list>
  2.         <razdel>
  3.                 <id>1</id>
  4.                 <name>Раздел 1</name>
  5.                 <about>Описание раздела 1</about>
  6.         </razdel>
  7.         <razdel>
  8.                 <id>2</id>
  9.                 <name>Раздел 2</name>
  10.                 <about>Описание раздела 2</about>
  11.         </razdel>
  12. </razdel_list>

Тогда как мне по <id> получить <name> и <about> родительского элемента, то есть <razdel>? И тут важно, что php функция должна принимать id и возвращать значения <name> и <about> в одном массиве.
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Апреля, 2014 - 04:11:59
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class MyXML {
  2.  
  3.     private $_sXML = '';
  4.  
  5.     /**
  6.      * @var SimpleXMLElement
  7.      */
  8.     private $_rXML = null;
  9.  
  10.     /**
  11.      * @param string $sXML
  12.      */
  13.     public function __construct($sXML) {
  14.         $this->_sXML = trim($sXML);
  15.         $this->_rXML = simplexml_load_string($this->_sXML);
  16.     }
  17.  
  18.     /**
  19.      * @param int|string $id
  20.      * @return SimpleXMLElement|stdClass
  21.      */
  22.     public function getDataByID($id)
  23.     {
  24.         $query = '(//razdel[./id = ' . $id . '])[1]';
  25.         $data = $this->_rXML->xpath($query);
  26.  
  27.         if(count($data)) {
  28.             return $data[0];
  29.         }
  30.  
  31.         return new stdClass();
  32.     }
  33. }
  34.  
  35. $xml = new MyXML('
  36.    <razdel_list>
  37.            <razdel>
  38.                    <id>1</id>
  39.                    <name>Раздел 1</name>
  40.                    <about>Описание раздела 1</about>
  41.            </razdel>
  42.            <razdel>
  43.                    <id>2</id>
  44.                    <name>Раздел 2</name>
  45.                    <about>Описание раздела 2</about>
  46.            </razdel>
  47.    </razdel_list>
  48. ');
  49.  
  50. echo $xml->getDataByID(2)->about;

(Отредактировано автором: 05 Апреля, 2014 - 04:38:58)

 
 Top
perezzloy
Отправлено: 05 Апреля, 2014 - 15:14:59
Post Id


Новичок


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


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




armancho7777777 пишет:
PHP:
скопировать код в буфер обмена
  1. class MyXML {
  2.  
  3.     private $_sXML = '';
  4.  
  5.     /**
  6.      * @var SimpleXMLElement
  7.      */
  8.     private $_rXML = null;
  9.  
  10.     /**
  11.      * @param string $sXML
  12.      */
  13.     public function __construct($sXML) {
  14.         $this->_sXML = trim($sXML);
  15.         $this->_rXML = simplexml_load_string($this->_sXML);
  16.     }
  17.  
  18.     /**
  19.      * @param int|string $id
  20.      * @return SimpleXMLElement|stdClass
  21.      */
  22.     public function getDataByID($id)
  23.     {
  24.         $query = '(//razdel[./id = ' . $id . '])[1]';
  25.         $data = $this->_rXML->xpath($query);
  26.  
  27.         if(count($data)) {
  28.             return $data[0];
  29.         }
  30.  
  31.         return new stdClass();
  32.     }
  33. }
  34.  
  35. $xml = new MyXML('
  36.    <razdel_list>
  37.            <razdel>
  38.                    <id>1</id>
  39.                    <name>Раздел 1</name>
  40.                    <about>Описание раздела 1</about>
  41.            </razdel>
  42.            <razdel>
  43.                    <id>2</id>
  44.                    <name>Раздел 2</name>
  45.                    <about>Описание раздела 2</about>
  46.            </razdel>
  47.    </razdel_list>
  48. ');
  49.  
  50. echo $xml->getDataByID(2)->about;

Спасибо огромное, это именно то, что надо! Теперь стало гораздо понятнее как действовать. Улыбка
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Апреля, 2014 - 15:51:41
Post Id



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


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


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




Да не за что )
 
 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