用于保存嵌套的基于XML的数据的数据结构

时间:2012-09-02 23:26:38

标签: php xml data-structures recursion

我通过curl获得此类回复:

<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

我很确定这不是很难实现,但我已经失去了很多时间而没有成功。任何小费都非常受欢迎。感谢.-

编辑1

我主要关心的是如何获取[深度] [元素]索引以及级别数据(类型,名称,内容等)的方式。

编辑2

基本上这是一个递归编程问题。 也许可以通过while语句比使用递归函数更容易完成?

1 个答案:

答案 0 :(得分: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;