2013-10-21 81 views
0
<Pathways species="homo sapiens"> 
<Pathway dbId="109581" displayName="Apoptosis"> 
<Pathway dbId="109607" displayName="Extrinsic Pathway for Apoptosis"> 
    <Pathway dbId="73887" displayName="Death Receptor Signalling"> 
    <Pathway dbId="75157" displayName="FasL/ CD95L signaling"> 
     <Reaction dbId="75244" displayName="FASL binds FAS Receptor" /> 
     <Reaction dbId="71050" displayName="Trimerization of the FASL:FAS receptor complex" /> 
     <Reaction dbId="83650" displayName="FasL:Fas binds FADD" /> 
     <Reaction dbId="83586" displayName="FASL:FAS Receptor Trimer:FADD complex binds pro-Caspase-8" /> 
     <Reaction dbId="141310" displayName="FASL:FAS Receptor Trimer:FADD complex binds pro-Caspase-10" /> 
    </Pathway> 
    </Pathway> 
</Pathway> 
    </Pathway> 
<Pathway dbId="109581" displayName="Signaling pathway"> 
</Pathway> 
</Pathways> 

任何人谁知道如何在网站上显示他们就像一棵树: 类似如下:显示分层XML数据

-Apoptosis 
--Extrinsic Pathway for Apoptosis 
---Death Receptor Signalling 
----FasL/ CD95L signaling 
-----FASL... 
-----Trimerizaiton of the FASL.... 
. . 
. . 
. . 
-Signaling pathway 

我不知道有多深的树, 但不要太多。 谢谢。

+0

谢谢,完全是新来的。 – LEON

回答

0

您可以使用PHP's SimpleXMLIterator它不支持标准的PHP RecursiveIterator树遍历。

下面的例子确实输出这段文字树例如自带相当接近,你在你的问题已经概述的输出类型:

|-Pathway: Apoptosis 
| \-Pathway: Extrinsic Pathway for Apoptosis 
| \-Pathway: Death Receptor Signalling 
|  \-Pathway: FasL/ CD95L signaling 
|  |-Reaction: FASL binds FAS Receptor 
|  |-Reaction: Trimerization of the FASL:FAS receptor complex 
|  |-Reaction: FasL:Fas binds FADD 
|  |-Reaction: FASL:FAS Receptor Trimer:FADD complex binds pro-Caspase-8 
|  \-Reaction: FASL:FAS Receptor Trimer:FADD complex binds pro-Caspase-10 
\-Pathway: Signaling pathway 

下面是从代码的摘录:

<?php 
/** 
* Iterator Garden Example 
* 
* Display hierarchical xml data in web page 
* 
* @link http://stackoverflow.com/q/19485654/367456 
*/ 

require __DIR__ . '/iterator_garden.php'; 

$file = __DIR__ . '/data.xml'; 
$xml = file_get_contents($file); 

$it = new SimpleXMLIterator($xml); 

$decor = new RecursiveDecoratingIterator($it, function($item) { 
    return $item['displayName'] ?: $item['species']; 
}, RecursiveDecoratingIterator::DECORATE_NODES); 


$tree = new RecursiveTreeIterator($decor, RecursiveTreeIterator::BYPASS_CURRENT); 

foreach($tree as $key => $item) 
{ 
    echo $key, ': ', $item, "\n"; 
} 

Iterator Garden is available on Github的代码,这里的RecursiveDecoratingIterator使用。

+0

非常感谢您的回复。你有任何想法,比如点击顶层,然后它会显示它的所有子项。再次点击它会隐藏所有的孩子。 – LEON