Привет
есть ли у кого-то опыт работы с рекурсивными функциями?
Я пытаюсь разобрать XML-файл на объекты (в PHP) (для последующего использования в drupal)
Код, который я пишу, после первого «дочернего» узла практически всегда одинаков (см. Ниже).
единственные две вещи, которые изменяются, это ссылка из xpath (что не должно быть таким сложным) и создание динамической переменной-объекта (если таковая существует).
Код для первого предмета (все это курс)
'$ item-> identif <- известен, потому что вы находитесь в foreach </p>
$ resulty =
$ xpaths-> xpath ("/ org.olat.course.Structure / rootNode / children / [идент =
'$ item-> идент.'] / children / [type = 'st' или type = 'sp' или type =
'BC'] ");
foreach ($resulty as $itemy) {
$SubjectObject = new subject();
// isnt 100% correct but doesn't matter now
$SubjectObject->getSubjectFolders($FolderObject);
$SubjectObject->setSubjectId(isset($item->SubjectId) ? (string) $item->SubjectId: null);
$SubjectObject->setSubjectShortTitle(isset($item->SubjectName) ? (string) $item->SubjectName: null);
$ChapterObject->setSubject($SubjectObject);
}
Теперь - если я хочу получить предмет из предмета из предмета из курса, то это будет
$ resulty = $ xpaths-> xpath ("/ org.olat.course.Structure / rootNode / children / [ident = '$ item-> identif'] / children / [type = ' st 'or type =' sp 'или type =' bc '] ");
foreach ($resulty as $itemy) {
$SubjectObject = new subject();
$SubjectObject->getSubjectFolders($FolderObject);
$SubjectObject->setSubjectId(isset($itemy->SubjectId) ? (string) $itemy->SubjectId: null);
$SubjectObject->setSubjectShortTitle(isset($itemy->SubjectName) ? (string) $itemy->SubjectName: null);
$resultz = $xpaths->xpath("/org.olat.course.Structure/rootNode/children/*[ident = '$item->ident']children/*[ident = '$itemy->ident']/children/*[type = 'st' or type = 'sp' or type = 'bc']");
foreach ($resultz as $itemz) {
$SubSubjectObject = new subject();
$SubSubjectObject->getSubjectFolders($FolderObject);
$SubSubjectObject->setSubjectId(isset($itemz->SubjectId) ? (string) $itemz->SubjectId: null);
$SubSubjectObject->setSubjectShortTitle(isset($itemz->SubjectName) ? (string) $itemz->SubjectName: null);
$resulta = $xpaths->xpath("/org.olat.course.Structure/rootNode/children/*[ident = '$item->ident']/children/*[ident = '$itemy->ident']/children/*[ident = '$itemz->ident']/children/*[type = 'st' or type = 'sp' or type = 'bc']");
foreach ($resulta as $itema) {
$SubSubSubSubjectObject= new subject();
$SubSubSubSubjectObject->getSubjectFolders($FolderObject);
$SubSubSubSubjectObject->setSubjectId(isset($itema->SubjectId) ? (string) $itema->SubjectId: null);
$SubSubSubSubjectObject->setSubjectShortTitle(isset($itema->SubjectName) ? (string) $itema->SubjectName: null);
(and so on)
$SubSubSubjectObject->setSubject($SubSubSubSubjectObject);
}
$SubjectObject->setSubject($SubSubjectObject);
}
$ChapterObject->setSubject($SubjectObject);
}
вот дерево xml (пример)
<Structure>
<rootnode>
<CursusName>History</CursusName>
<CursusId>100001</CursusId>
<children>
<childNode>
<SubjectName>World War 1</SubjectName>
<SubjectId>100002</SubjectId>
<children>
<childNode>
<SubjectName>World War 1.1</SubjectName>
<SubjectId>100016</SubjectId>
<children>
<childNode>
<SubjectName>World War 1.1.1</SubjectName>
<SubjectId>100032</SubjectId>
<children>
<childNode>
<SubjectName>World War 1.1.1.1</SubjectName>
<SubjectId>100065</SubjectId>
</children>
</childNode>
</children>
+<children></children>
</childNode>
</children>
+<children></children>
</childNode>
+<childNode></childNode>
</children>
+<children></children>
</childNode>
+<childNode></childNode>
+<childNode></childNode>
</children>
+<visibility></visibility>
+<accessibility></accessibility>
</rootnode>
<version>1</version>
</Structure>
SO
Может кто-нибудь помочь мне?
Кто-нибудь знает, как я могу решить проблему с объектами?
своего рода цикл foreach / while, который создает объекты? и доставить их в родительский объект?
извините за длинный пост и все эти строки кода
С уважением
Дитер
С уважением