PHP SimpleXMLElement对象获取数据

时间:2016-12-07 13:07:57

标签: php xml object simplexml

我有以下XML:

<Root>
    <personalData>
        <userName>John Tom</userName>
        <email>mail@example.com</email>
    </personalData>
    <profesionalData>
        <job>engineer</job>
        <jobId>16957</jobId>
    </profesionalData>
</Root>

在我的调试器中执行:

$myObject->xpath('//Root/profesionalData')

我有:

: array = 
  0: object(SimpleXMLElement) = 
    job: string = engineer    
    jobId: string = 16957

我无法抓住jobId 16957

我该怎么办?

1 个答案:

答案 0 :(得分:1)

$root = simplexml_load_file('file.xml');


$job_ids = $root->xpath('//profesionalData/jobId');

if (!$job_ids) {
  die("Job IDs not found");
}

foreach ($job_ids as $id) {
  // SimpleXmlElement implements __toString method, so
  // you can fetch the vlaue by casting the object to string.
  $id = (string)$id;
  var_dump($id);
}

示例输出

string(5) "16957"

备注

您不需要在XPath表达式中指定Root,如果您要获取所有profesionalData/jobId标记,无论它们在文档中的位置,只需使用双斜杠( //)表达。当您想要避免注册XML名称空间时,这种方法可能很方便。否则,您可以使用类似/Root/profesionalData/jobId的严格表达式(来自根目录的路径)。顺便说一句,您当前的表达式(//Root/profesionalData/jobId)会匹配文档中出现的/Root/profesionalData/jobId,例如/x/y/z/Root/profesionalData/jobId

由于SimpleXmlElement::xpath函数在成功时返回数组,或者在失败时返回FALSE,因此如果它是非空数组,则应使用循环迭代该值。

SimpleXmlElement实施__toString方法。当对象出现在字符串上下文中时,将调用该方法。特别是,您可以cast将对象转换为字符串,以便获取节点的字符串内容。