simplexml_load_file多个等于节点

时间:2018-09-07 12:14:31

标签: php xml

我有这个XML:

<user>
    <name>Name</name>
    <jobs>Job 1</jobs>
    <jobs>Job 2</jobs>
</user>

我以这种方式读取文件:

$xml = simplexml_load_file($file->getRealPath());

我可以通过以下方式获取名称属性:

(string) $xml->name

但是,如果我尝试这样做:

$jobs = $xml->jobs

我的$jobs变量中只有一份工作

如何更改代码以从xml获取所有作业?

1 个答案:

答案 0 :(得分:1)

SimpleXML中的

$xml->jobs$xml->jobs[0]的简写-也就是说,它只是为您提供具有该名称的第一个元素。这就是让您执行$xml->node1->node2->node3->etc之类的“简单”操作来快速深入文档的原因。

如果要遍历具有相同名称的所有节点,则可以仅使用标准的foreach循环(因为它们实现了PHP的Traversable接口):

foreach ($xml->jobs as $job) {
  // do something...
}

或者,如果您只想将整个节点集合作为一个数组来获取(例如,为了将它们传递给另一个函数),则可以使用xpath方法按名称搜索节点(除其他外):

$jobs = $xml->xpath('jobs');

请参见https://3v4l.org/9lcio