Xpoint
   [напомнить пароль]

SimpleXMLElement Object

Метки: [без меток]
[удл]
2010-02-25 11:49:02 [обр] tcolonel[досье]

Всем доброго здравия.

Помогите с SimpleXMLElement Object (уже что только не перепробовал). Есть XML объект вида:

[0] => SimpleXMLElement Object
(
 [@attributes] => Array
 (
  ...
 )
 [a] => Array
 (
  [0] => Test 1
  [1] => Test 2
  [2] => Test 3
  [3] => Test 4
  [4] => Test 5
 )
)
[1] => SimpleXMLElement Object
(
 [@attributes] => Array
 (
  ...
 )
 [a] => Array
 (
  [0] => Test 1
  [1] => Test 2
  [2] => Test 3
 )
)
[2] => SimpleXMLElement Object
(
 ...
)
[3] => SimpleXMLElement Object
(
 ...
)
[4] => SimpleXMLElement Object
(
 ...
)

как из него получить массив вида:

Array
(
 [0] => Array
 (
  [0] => Test 1
  [1] => Test 2
  [2] => Test 3
  [3] => Test 4
  [4] => Test 5
 )
 [1] => Array
 (
  [0] => Test 1
  [1] => Test 2
  [2] => Test 3
 )
 [2] => Array
 (
  ...
 )
 [3] => Array
 (
  ...
 )
 [4] => Array
 (
  ...
 )
)

Спасибо большое.

спустя 4 часа 59 минут [обр] tcolonel[досье]
Если кому-то потребуется - выложу реализацию. Она конечно далека от идеала, но, работает как мне нужно.
спустя 1 час 35 минут [обр] Алексей Севрюков(162/1280)[досье]
tcolonel[досье] конечно выкладывайте, я не совсем понимаю вывод PHPшного dumpа, но, ИМХО, тут реализация - две строчки максимум.
спустя 27 минут [обр] tcolonel[досье]
Алексей Севрюков[досье] С Вами опасно иметь дело ...
Решение такое:
$arSubSections['xml_subsections'] = $xml->xpath('//*[@class="titul2"]');
foreach($arSubSections['xml_subsections'] as $k=>$v)
{
 $full_links = $v->xpath('a');
 $arSubSections['links'][$k] = $full_links;
 foreach($arSubSections['links'][$k] as $k1=>$v1)
 {
  foreach($v1->attributes() as $h=>$l)
  {
   $h = '';
   $link = $h . $l;
  }
  $arSubSections['subsections'][$k][$k1]['link'] = $link;
  $txt = iconv("UTF-8", "CP1251", GetFromXPath($v1));
  $pos = strripos($txt, ' ');
  if($pos === false) {}
  else {$txt = substr($txt, 0, $pos);}
  $arSubSections['subsections'][$k][$k1]['name'] = $txt;
 }
}
спустя 2 часа 33 минуты [обр] Алексей Севрюков(162/1280)[досье]

У Вас в первом посте вывод дампа объекта $arSubSections['xml_subsections'], правильно?
Это массив сложных, структур, в частности объектов.
Я правильно понимаю что можно обратится к одному из вложенных массивов так:

$d= $xml->xpath('//*[@class="titul2"]');
$d[0]['a']; // один из нужных Вам массивов

?
P.S. Простите за глупые вопросы, у меня с PHP туго (точнее я его просто не знаю), а Ваше решение содержит намного больше, чем было в первоначальном вопросе.

спустя 6 часов [обр] tcolonel[досье]

Алексей Севрюков[досье]

Это массив сложных, структур, в частности объектов.

Я бы так не сказал про объекты. Там и массивы в объектах и объекты в массивах и в перемешку.

$d[0]['a']; // один из нужных Вам массивов

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

Вопросы совсем неглупые. Мое решение не содержит больше того, что я изложил в первом посте (за исключением всяких переводов кодировок и обрезаний строк). Просто возможно есть более простое решение, о котором я сам хотел узнать. Заметьте, я написал:

Она конечно далека от идеала, но, работает как мне нужно.

Спасибо за внимание.

спустя 10 часов [обр] Алексей Севрюков(162/1280)[досье]

tcolonel[досье] если "так выбрать можно, но не для моего случая" не подходит, то может обрисуете задачу более подробно? Получается что на выходе должна получиться совсем не та структура, которую Вы предоставили первоначально.

Она конечно далека от идеала, но, работает как мне нужно.

Форум нужен чтобы помогать людям. Этим я и занимаюсь, разбираюсь в Вашей проблеме чтобы довести код до идеала, сделать его простым, красивым и понятным.
Делать Вас это никто не заставляет, Вы вправе отказаться от помощи и использовать свой работающий вариант.

спустя 8 часов [обр] tcolonel[досье]
Алексей Севрюков[досье] Спасибо за внимание. Еще раз убеждаюсь что здесь очень хорошие люди. При первой возможности возвращения к данной теме я обязательно все распишу подробно и приведу конкретные примеры.
спустя 5 минут [обр] tcolonel[досье]
И не подумайте что у меня даже в мыслях было чтобы отказываться от помощи или еще чего. Просто обыкновенная текучка, которую сделал, запомнил и забыл. Конечно, прежде всего большую роль играет любопытство. Спасибо еще раз за внимание.
Powered by POEM™ Engine Copyright © 2002-2005