【问题标题】:Looping Through Nodes In An XML File Using PHP使用 PHP 循环遍历 XML 文件中的节点
【发布时间】:2012-06-29 03:32:59
【问题描述】:

您好 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 />';

}

?>

感谢您的帮助!

【问题讨论】:

  • 请注意:您的 XML 无效,&lt;Field1&gt;Foo&lt;/Field2&gt; 中的开始和结束标签不匹配
  • 谢谢 - 我编辑了这篇文章的 xml 以简化它,但只更改了开始标签。关于如何处理我的循环问题有什么建议吗?
  • 刚刚修复了 xml - 匹配开始和结束标签 - 我的愚蠢错误。

标签: php xml


【解决方案1】:

您可以尝试像这样使用 XPath 获取祖父母

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

【讨论】:

  • 好的。这有帮助。关于如何将它组合在一起的任何建议 - 不熟悉 simplexml 中的 xpath
  • 换句话说 - 我应该回应什么?
  • 这将为您提供节点,您可以回显它的任何属性...但我想您需要将&lt;Submission&gt; 的索引转换为&lt;Submissions&gt;?如果是这种情况,我认为您将不得不使用其他答案中的嵌套循环。
  • MDrollette - 非常感谢您的帮助。非常感谢。
【解决方案2】:

我很少使用 SimpleXML,但你能不能这样做:

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

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

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

  }

}

编辑:更改了代码以正确显示名称标签中的数据(如下面的 cmets 中建议的 OP)。

【讨论】:

  • 大卫 - 谢谢你的好建议......差不多了。当我将您的代码放入我的 php 文件时,我得到一个空白字段,其中 $Sub 变量正在回显。我想要的是提交的名称 - 位于行首。有什么建议吗?
  • 我想通了!我刚刚在 echo 语句中添加了 $Sub->Name ,它就像一个魅力!谢谢,大卫。感谢您的帮助。
  • 抱歉,我的意思是在检查文档后更新答案,但我还没来得及就被我的机器叫走了。很高兴它对你有用。我将更新我的答案以反映我的发现,尽管它基本上就是你刚才所说的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2014-03-30
  • 2021-11-12
相关资源
最近更新 更多