По какому принципу simplexml создает объекты и массивы?

Фанат

oncle terrible
Команда форума
По какому принципу simplexml создает объекты и массивы?

Код:
SimpleXMLElement Object
(
    [movie] => SimpleXMLElement Object
        (
            [title] => PHP: Behind the Parser
            [characters] => SimpleXMLElement Object
                (
                    [character] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [name] => Ms. Coder
                                    [actor] => Onlivia Actora
                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [name] => Mr. Coder
                                    [actor] => El ActÓr
                                )
                        )
                )
        )
)
Я думал, что всё, у чего есть внуки - это объект. а дети пишутся в массив.
но тут character - массив, который сноа содержит объекты.

можно ли как-то унифицировать это дело?

И правда ли, что SimpleXML всё перекодирует в UTF без спросу?

Учитывая эти два вопроса - явлется ли SimpleXML самым простым способом разбора XML?
 

fixxxer

К.О.
Партнер клуба
>И правда ли, что SimpleXML всё перекодирует в UTF без спросу?
я такое только под виндой встречал

-~{}~ 22.12.07 11:42:

ну я так понимаю вложенные детки одного уровня пишутся в массив, а атрибуты в объект.

покажи xml исходный
UPD: уже не надо =)

-~{}~ 22.12.07 11:49:

вобщем
<xml>
<a>
<b>foo</b>
</a>
</xml>
получим объект

<xml>
<a>
<b>foo</b>
<b>foo</b>
</a>
</xml>
получим массив

<xml><a b="foo" /></xml>
тут вообще a -> @attributes['b'], бр.

<xml></xml> специально сверху добавил ибо оно кастрируется

вобщем нафиг такое счастье ;)

-~{}~ 22.12.07 11:50:

PHP:
$xml = xml_parser_create();
xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($xml, file_get_contents($xmlfile), $val, $idx);
xml_parser_free($xml);
var_dump($val);
var_dump($idx);
вот самое простое :)
 

Фанат

oncle terrible
Команда форума
вот я тоже об этом задумался.
вот так посылаешь других в ман, а потом сам залезешь...

А что посоветуешь?

-~{}~ 22.12.07 11:58:

не. вывод этого простого никуда не годится...

сначала, пожалуй, мы должны определиться с тем, что мы хочем получить...

зы. позырь http://phpwiki.ru/XML
явных косяков нет?
 

fixxxer

К.О.
Партнер клуба
ну я еще со времен php4 пользуюсь тем что скопипастил =)
отдает 2 массива - со значениями и с индексом.
по ним легко построить нужную тебе структуру.
не очень конечно просто - зато везде работает.
 

Фанат

oncle terrible
Команда форума
меня в примере к симплехмл убивает вот эта строчка:
echo $xml->movie->{'great-lines'}->line;
что-то кажется мне в ней неправильным.
 

fixxxer

К.О.
Партнер клуба
>зы. позырь http://phpwiki.ru/XML

ну фиды бы лучше отдавать в utf-8 ;)
ну и дату. дату надо в виде date('r'). и pubDate кстати.

-~{}~ 22.12.07 12:07:

>echo $xml->movie->{'great-lines'}->line;
ну а что делать :)
можно было бы все приводить по каким то правилам к стандартам именования переменных в php, но там конфликты могут получиться итп. решили как проще =)
 

Фанат

oncle terrible
Команда форума
слушай, а эти кучерявые скобочки только из-за дефиса штоле?

-~{}~ 22.12.07 12:10:

кодировку поправил, а дату вообще нафиг убрал
 

fixxxer

К.О.
Партнер клуба
ага.

это хитрожопый синтаксис. вообще можно как угодно переменные называть ;)

${"\n\x00"}[0]['---'] = 'gigi';
var_dump(${"\n\x00"});

%)
 

Фанат

oncle terrible
Команда форума
блин - вот ведь, что бывает, когда данные превращаются в конструкции языка...

не, я прекрасно понимаю, что у массивов та же самая фигня...
 

fixxxer

К.О.
Партнер клуба
PHP:
function o2a($a) { return is_scalar($a) ? $a : array_map('o2a', (array)$a); }
$xml = array_map('o2a', (array)(new SimpleXMLElement($xmlstr)));
var_dump($xml);
так хотел? %)
 

Фанат

oncle terrible
Команда форума
Супер! ага, примерно так. только атрибуты, сцуко, теряет...

-~{}~ 22.12.07 12:47:

стоп. не понял. оригинал тоже теряет, штоле?
 

fixxxer

К.О.
Партнер клуба
ну он не то чтобы теряет

PHP:
$xmlstr="<xml><a id=\"1\" zz=\"asd\">test</a></xml>";
$xml =new SimpleXMLElement($xmlstr);
var_dump($xml);
var_dump($xml->a->attributes());
-~{}~ 22.12.07 12:56:

там __toString чтоли перегруженый, итить =)
 

Фанат

oncle terrible
Команда форума
ну, блин, это ж надо знать.
а пример из мана атрибуты не показывает
 

fixxxer

К.О.
Партнер клуба
вывод простой - не трахать мозг а пользоваться xpath
 
Сверху