如何使用SimpleXML和echo从XML提取数据到PHP ?


How can I extract data from XML to PHP using SimpleXML and echo?

我已经成功地将LinkedIn API与我的网站集成,但是我正在努力从XML中提取信息。现在我只是想把它打印出来,这样我就可以在用户登录并获得许可后继续使用他们的信息。

下面是XML的格式,下面是我用来提取信息的代码。"名"、"姓"answers"标题"调用可以正常工作,但是如果元素有副标题,则不会打印出任何内容。我试过使用

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'};

任何帮助将非常感激,感谢阅读!

使用SimpleXML,您将按照如下方式访问LinkedIn XML数据属性:

任何带有破折号的属性都得到{},因此first-name变成:

$xml->{'first-name'}

任何没有破折号的东西,如headline,引用如下:

$xml->headline

任何作为集合的东西,例如positions,引用方式如下:

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

您的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'
}

尝试使用PHP的XML解析器:

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

尝试Paul上面的答案:

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;
    }

您的XML格式不正确…有几个元素没有关闭标记。因此,我们无法确切地知道XML的结构。(在XML中不能像在HTML中那样做。)

话虽这么说,假设<person>是上下文节点,您可以使用XPath表达式获得<title>元素的内容,如

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

我假设$xml是一个SimpleXMLElement对象。