使用SimpleXML获取第一个XML元素

时间:2013-04-19 05:45:38

标签: php xml xpath simplexml

好吧,这可能是一个愚蠢的问题,但我如何从XML文档中获取一个元素?

我有这个XML

$element = $response['linkedin'];

SimpleXMLElement Object
( 
    [id] => 575677478478
    [first-name] => John
    [last-name] => Doe
    [email-address] => john@doe.com
    [picture-url] => http://m3.licdn.com/mpr/mprx/123
    [headline] => Headline goes here
    [industry] => Internet
    [num-connections] => 71

我只想将first-name指定为$firstName

我可以使用xPath循环它,但这看起来有点矫枉过正。

例如:

$fName = $element->xpath('first-name');
foreach ($fName as $name) 
{
    $firstName = $name;
}

3 个答案:

答案 0 :(得分:3)

如果您将SimpleXML中的(一个或多个)元素节点列表作为单个元素访问,它将返回第一个元素。这是默认情况(也在SimpleXML Basic Usage中概述):

$first = $element->{'first-name'};

如果有多个元素,您可以使用它的基于零的索引指定您的意思,方括号(数组访问)或卷曲(属性访问)括号:

$first = $element->{'first-name'}[0];
$first = $element->{'first-name'}{0};

这也允许您创建一个所谓的SimpleXML自引用来访问元素本身,例如删除它:

unset($first[0]);  # removes the element node from the document.

unset($first);     # unsets the variable $first

您可能认为您的Xpath有点矫枉过正。但它在SimpleXML中并不昂贵。有时访问元素的唯一方法是 with Xpath even。因此,您可能知道您可以轻松访问第一个元素以及每个xpath。例如,SimpleXML中的父元素:

list($parent) $element->xpath('..'); # PHP < 5.4

$parent = $element->xpath('..')[0];  # PHP >= 5.4

正如您所看到的,实际了解如何更好地利用SimpleXML是值得的。如果您已经从 SimpleXML Basic Usage 页面了解了所有内容,那么您可能希望通过

了解更多信息。

答案 1 :(得分:0)

您可以使用XPath查找匹配元素的第一个实例。

/ root / firstname [1]会在文档中为您提供firstname的第一个实例。

$res=$response['linkedin']->xpath('/first-name[1]');

答案 2 :(得分:0)

每个请求的答复表。 ^^

如果SimpleXMLElement中唯一包含$resource['linkedin'],则可以使用以下内容进行更改:

$resource['linkedin']->{'first-name'} = $name;

这允许您直接访问元素而无需对其执行xpath。 ^^