2012-09-02 135 views
0

我通过curl获得此类型的响应:数据结构保存基于嵌套的XML数据

<ArrayOfServerFile> 
    <ServerFile> 
     ... 
     <FileType>Folder</FileType> 
     <Identifier>x123</Identifier> 
     <Name>Client Templates</Name> 
     ... 
    </ServerFile> 
    <ServerFile> 
     ... 
     <FileType>XpressDox Template</FileType> 
     <Identifier>y456</Identifier> 
     <Name>contact-information.xdtpl</Name> 
     ... 
    </ServerFile> 
    ... 
</ArrayOfServerFile> 

我要保存这些信息在树状data structure

我已经试过这样的事情:

// Pseudo-code: 
function run_procedure() 
{ 
    get XML data via curl 

    if FileType == 'Folder' 

     save name and other useful data into $tree_like_data_structure 
     run_procedure() // recursive call 

    else if FileType == 'XpressDox Template' 

     save name and other useful data into $tree_like_data_structure 
} 

var_dump($tree_like_data_structure); 

的想法是代表这样保存的数据:

[0][0] -> data 
     [1][0] -> data 
     [1][1] -> data 
     [1][2] -> [2][0] -> data 
        [2][1] -> data 
     [1][3] -> data 

我敢肯定,这是不是很难做到,但我有失去了很多没有成功的时间。任何提示都非常受欢迎。 Thanks.-

EDIT 1

我主要关心的是如何获得[深度] [元件]的索引以及如何电平数据(类型,名称,内容等)

编辑2

基本上,这是一个递归规划问题。 也许可以通过while声明比使用递归函数更容易完成声明吗?

+0

样本XML如何表示一棵树并不是很清楚。 – Tomalak

+0

'文件夹'表示可以使用'curl'导航的文件夹。所以当我找到一个文件夹时,我必须导航到它。所以我的问题是如何保存所有这些数据。 –

+0

它是否有帮助http://stackoverflow.com/questions/2531632/php-jaxb-equivalent –

回答

0

尝试使用SimpleXML with the DOM来创建您的数组。

$dom = new DOMDocument; 
$dom->loadXML(' 
<ArrayOfServerFile> 
    <ServerFile> 
     <FileType>Folder</FileType> 
     <Identifier>x123</Identifier> 
     <Name>Client Templates</Name> 
    </ServerFile> 
</ArrayOfServerFile>'); 

if (!$dom) { 
    echo 'Error while parsing the document'; 
    exit; 
} 
$s = simplexml_import_dom($dom); 
echo $s->ServerFile[0]->FileType; 
+0

你的回答完全超出了范围......我正在谈论'数据结构'和'递归'。 –

+0

我不同意。我的观点是,如果您已经知道XML的结构,那么您可以将它保存到SimpleXML对象中,而无需任何递归。它已经是一棵树了。 '$ s-> ServerFile [0] - > FileType ===“文件夹”;' – ow3n

+0

是的,我也这么认为。但是你必须明白的是,没有一个唯一的XML文件**。当一个元素表示一个文件夹'pseudo-code说:通过curl获取XML数据'时,这些文件就会动态下载。这个想法是同时保存和下载数据,建立一个树形结构。任何方式,这已经解决了。有空的时候我会解决我的问题。谢谢.- –