【发布时间】:2012-04-12 12:14:52
【问题描述】:
问候
有人对递归函数有一些经验吗?
我正在尝试将 XML 文件解析为对象(在 PHP 中)(以便稍后在 drupal 中使用它) 我正在编写的代码在第一个“子”节点之后几乎总是相同的(见下文)。 唯一改变的两件事是来自 xpath 的链接(应该不那么困难)和创建动态对象变量(如果存在)。
第一科的代码(整个就是一门课程)
'$item->ident
$结果 = $xpaths->xpath("/org.olat.course.Structure/rootNode/children/[ident = '$item->ident']/children/[type = 'st' or type = 'sp' or 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->ident']/children/[type = 'st' 或 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>
所以
有人可以帮我吗? 有人知道我可以如何解决对象的问题吗? 一种创建对象的 foreach/while 循环?并将它们提取到他的父对象中?
很抱歉这篇长文和所有这些代码行
亲切的问候
迪特
亲切的问候
【问题讨论】:
-
我认为您需要正确格式化您的代码...