Как я могу извлечь данные из XML в PHP, используя SimpleXML и echo? - PullRequest
1 голос
/ 08 ноября 2011

Я успешно интегрировал API-интерфейс LinkedIn с моим веб-сайтом, но изо всех сил пытаюсь извлечь информацию из XML. В данный момент я просто пытаюсь распечатать его, чтобы я мог перейти к использованию информации пользователя, как только он вошел в систему и дал разрешение.

Ниже приведен формат XML, а далее - код, который я использую для извлечения информации. Вызовы «имя», «фамилия» и «заголовок» работают отлично, но там, где элемент имеет подзаголовки, ничего не распечатывается. Я пытался использовать

echo 'Positions: ' . $xml->{'positions:(title)'};

но это не работает.

Вот XML:

<person>
  <id>
  <first-name />
  <last-name />
<headline>
<location>
  <name>
  <country>
    <code>
  </country>
</location>
<industry>
<summary/>
<positions total="">
  <position>
    <id>
    <title>
    <summary>
    <start-date>
      <year>
      <month>
    </start-date>
    <is-current>
    <company>
      <name>
    </company>
  </position>
</person>

Это код, который я использовал, чтобы попытаться извлечь информацию. Я знаю, что должен как-то включить подзаголовок, но я просто не знаю, как!

echo 'First Name: ' . $xml->{'first-name'};
echo '<br/>';
echo 'Last Name: ' . $xml->{'last-name'};
echo '<br/>';
echo 'Headline: ' . $xml->{'headline'};
echo '<br/>';
echo 'Positions: ' . $xml->{'positions'};

Любая помощь будет принята с благодарностью, спасибо за чтение!

Ответы [ 5 ]

3 голосов
/ 08 ноября 2011

Используя SimpleXML, вы получите доступ к свойствам данных LinkedIn XML следующим образом:

Все, что имеет тире в свойстве, получает {}, поэтому first-name становится:

$xml->{'first-name'}

На что-либо без тире, например headline, ссылаются как:

$xml->headline

На любую коллекцию, такую ​​как positions, ссылаются как:

foreach($xml-positions as $position) {
  echo $position->title;
  echo $position->{'is-current'};
}
1 голос
/ 08 ноября 2011

Ваш XML недействителен, он плохо сформирован. В любом случае, вот пример XML и как его использовать.

$v = <<<ABC
<vitrine>
  <canal>Hotwords</canal>
<product id="0">
    <descricao>MP3 Apple iPod Class...</descricao>
    <loja>ApetreXo.com</loja>

    <preco>&#224; vista R$765,22</preco>
    <urlImagem>http://im</urlImagem>
    <urlProduto>http://</urlProduto>
  </product>
</vitrine>
ABC;

$xml = simplexml_load_string($v);


foreach ($xml->product as $c){    
    echo $c->loja; //echoing out value of 'loja'
}
0 голосов
/ 26 марта 2013

Пробовал ответ Павла выше для:

foreach($xml-positions as $position) {
    echo $position->title;
    echo $position->{'is-current'};
}   

не работает для меня - поэтому я использовал это - не так элегантно, но работает

    for($position_num = 0; $position_num < 10;$position_num++){
        echo $xml->positions->position[$position_num]->company->name;
    }
0 голосов
/ 08 ноября 2011

Ваш XML не правильно сформирован ... есть несколько элементов без закрывающих тегов.Таким образом, мы не можем точно знать структуру вашего XML.(Вы не можете сделать это в XML, как в HTML.)

При этом, предполагая, что <person> является узлом контекста, вы, вероятно, можете получить содержимое элемента <title>, используяВыражение XPath, как в

$xml->xpath('positions/position/title');

Я предполагаю, что $ xml является объектом SimpleXMLElement.

0 голосов
/ 08 ноября 2011

Попробуйте вместо этого использовать синтаксический анализатор PHP PHP:

http://www.php.net/manual/en/function.xml-parse.php

...