使用PHP在XML文件中循环遍历节点

时间:2012-06-29 03:32:59

标签: php xml

您好Stackoverflow社区 - 来自发烧友程序员的问题,我在这里研究了很多,但仍然无法弄清楚。感谢我能得到的任何帮助。

我有一个名为example.xml的XML文档,其结构如下......

<Submissions>
    <Submission>
        <Name>Submission 001</Name>
        <Entries>
            <Entry>
                <EntryId>1</EntryId>
                <Field1>Foo</Field1>
            </Entry>

            <Entry>
                <EntryId>2</EntryId>
                <Field1>Bar</Field1>
            </Entry>
        </Entries>
    </Submission>
    <Submission>
        <Name>Submission 002</Name>
        <Entries>
            <Entry>
                <EntryId>1</EntryId>
                <Field1>Foo</Field1>
            </Entry>

            <Entry>
                <EntryId>2</EntryId>
                <Field1>Bar</Field1>
            </Entry>
        </Entries>
    </Submission>
</Submissions>

我在PHP中使用SimpleXML并希望解析XML文档并向浏览器回显如下所示:

Submission 1, Entry 1, Foo
Submission 1, Entry 2, Bar
Submission 2, Entry 1, Foo
Submission 2, Entry 2, Bar

所以基本上这个想法只是遍历XML文档并将每个条目与它所属的提交相关联。

我做了我的研究,我很乐意使用以下代码输出输入的条目,但我无法弄清楚如何将条目与提交相关联。

<?php

$xml = simplexml_load_file('example.xml');

$Submissions = $xml;

foreach ($Submissions->Submission->Entries->Entry as $Entry) {

    echo $Entry->EntryId.' , '.$Entry->Field2.' <br />';

}

?>

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你可以尝试使用XPath来获得像这样的祖父母

$submission = $Entry->xpath("../..");

答案 1 :(得分:0)

我很少使用SimpleXML,但是你不能做类似的事情:

foreach ($Submissions->Submission as $Sub) {

  foreach ($Sub->Entries->Entry as $Entry) {

    echo $Sub->Name . ', ' . $Entry->EntryId.' , '.$Entry->Field2.' <br />';

  }

}

编辑:更改了代码,以便在名称标记中正确显示数据(如下面评论中建议的那样)。