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

时间:2011-11-08 14:40:38

标签: php xml linkedin

我已成功将LinkedIn API与我的网站集成,但我很难从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 个答案:

答案 0 :(得分:3)

使用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 :(得分:1)

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

答案 2 :(得分:0)

尝试使用PHP的XML Parser:

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

答案 3 :(得分:0)

上述保罗的回答:

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

答案 4 :(得分:-1)

您的XML格式不正确......有几个元素没有关闭标记。所以我们无法确切知道XML的结构。 (你不能像在HTML中一样在XML中这样做。)

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

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

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