我有这个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获取所有作业?
答案 0 :(得分:1)
$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');