Я пытаюсь разобрать эту XML-структуру, но не могу найти способ разобрать «n» -глубокие вложенные теги с помощью рекурсии. Структура xml:
<plist version="1.0">
<key>1.1.1</key>
<dict>
<key>nag</key>
<integer>1</integer>
</dict>
<key>2.2.2</key>
<dict>
<key>nag</key>
<integer>1</integer>
</dict>
<key>3.3.3</key>
<dict>
<key>show_upgrade_button</key>
<integer>0</integer>
<key>nag_startup</key>
<dict>
<key>nag_gameover</key>
<integer>3</integer>
</dict>
<key>my_stuff</key>
<string>1=cb 2=rm 3=cb+rm =leave banner ads off</string>
</dict>
<key>4.4.4</key>
<dict>
<key>nag</key>
<integer>1</integer>
</dict>
</plist>
Узлы сопоставляются key
- dict
, являясь ключевым узлом, номер версии для данных внутри узла dict
, но структура xml имеет произвольную dict
вложенность, как вы можете видеть в приведенном выше коде. У меня есть рекурсивная функция, которая пока принимает узел dict
, но я не вижу света.
<? php
function recursiveNodes($nodes, $arr){
$count=0;
if($nodes->hasChildNodes() === true ){
foreach($nodes->childNodes as $node){
$temp = array();
if($node->nodeName === 'key'){
$temp['key_name'] = $node->nodeValue;
if($node->nextSibling->nodeName !== 'dict'){
$sibling = $node->nextSibling;
$temp['type_name'] = $sibling ->nodeName;
$temp['value_name'] = $sibling ->nodeValue;
}
if($sibling->nodeName === 'dict'){
return recursiveNodes($sibling, $arr[$count++][]=$temp);
}
}
}
}
return $arr;
}
?>
key
nodeValue и следующиеkey
данные родного брата в виде массива, который мне нужно вставить в базу данных. Скажем, первая пара ‹key› ‹dict›,<key>1.1.1</key> <dict> <key>nag</key> <integer>1</integer> </dict>
из узла ‹key›, который я получил 1.1.1, из узла ‹dict› - массив со следующими данными его дочерних узлов key_name = nag, type_name = integer и type_value = 1. - person Diego Romero   schedule 05.07.2013<dict>
элементы, у которых есть<key>
в качестве родственных. - person hakre   schedule 05.07.2013