2013-04-19 3 views
1

ОК, это может быть глупый вопрос, но как получить один единственный элемент из документа XML?Получение первого элемента XML с SimpleXML

У меня есть этот XML

$element = $response['linkedin']; 

SimpleXMLElement Object 
( 
    [id] => 575677478478 
    [first-name] => John 
    [last-name] => Doe 
    [email-address] => [email protected] 
    [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; 
} 
+0

Если 'XMLElement' является единственное, с чем вы работаете в '$ response ['linkedin']', '$ response [linkedin '] -> {' first-name '} = $ name'; должен иметь возможность сделать это за вас. – Jon

+0

Спасибо @ Jon, вот что я искал! Если вы добавите это как ответ, я соглашусь. –

+1

Пожалуйста, также используйте документацию exisitng, которая показывает это и многое другое: http://php.net/simplexml.examples-basic – hakre

ответ

0

Форма ответа на запрос. ^^

Если SimpleXMLElement единственный содержащийся в $resource['linkedin'], вы можете изменить его с помощью:

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

Это позволяет вам прямой доступ к элементу без необходимости делать xpath на нем. ^^

0

Вы можете использовать XPath, чтобы найти первый экземпляр согласующего элемента.

/root/firstname [1] предоставит вам первый экземпляр firstname в вашем документе.

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

Это все еще возвращает массив –

+0

Должен быть массив с одним элементом, хотя - просто возьмите первый один. –

2

Если вы получаете доступ к списку (одного или нескольких) узлов элемента в 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. Иногда единственным способом доступа к элементу является с Xpath even. Поэтому вам может быть полезно знать, что вы можете легко получить доступ к первому элементу, а также к xpath. Например, родительский элемент в SimpleXML:

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

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

Как вы можете видеть, что это стоит на самом деле понять, как работают вещи, чтобы сделать больше использовать SimpleXML.Если вы уже знаете, все из Usage страницы SimpleXML Basic, вы можете узнать немного больше с