2017-11-12 20 views
0

PHPでXMLデータを読み込もうとしています。 XMLデータは、次のリンクを持つAPIから取得されています。https://seekingalpha.com/api/sa/combined/AAPL.xml APIの最初の5つのニュースのニュース見出し、ニュースリンク、公開日、作成者名が必要です。これを行うには、次のPHPコードを使用しています:PHPでXMLデータを取得する

$note = "https://seekingalpha.com/api/sa/combined/".$symbolValue.".xml"; 
$xml=simplexml_load_file($note); 
$jsonArray = array(); 
for ($i=0; $i<5; $i++) { 
    $newsHeadline = $xml->channel->item[$i]->title->__toString(); 
    $newsLink = $xml->channel->item[$i]->link->__toString(); 
    $publishedDate = $xml->channel->item[$i]->pubDate->__toString(); 
    $authorName = $xml->channel->item[$i]->sa:author_name->__toString(); 
    $temp = array('Title' => $newsHeadline, 'Link' => $newsLink,'Publish'=>$publishedDate,'Author'=>$authorName); 
    array_push($jsonArray,$temp); 
} 
$jsonNews = json_encode($jsonArray); 
$completeData[9] = $jsonNews; 

上記のコードでは、$ noteにはAPIへのリンクが含まれています。 $symbolValueは私がフロントエンドから得ている値です。私のコードは著者名にアクセスするまで絶対に動作します。次のコード行:

$authorName = $xml->channel->item[$i]->sa:author_name->__toString(); 

私は、次のエラーを取得しています:

Parse error: syntax error, unexpected ':' in /home/File/Path 

私が使用することになっていない午前のように思え、「:」の著者名をフェッチします。 したがって、著者名のタグが「作成者」になるように、ユーザー名を取得して$tempに入れるにはどうすればよいですか? XMLファイルに関するアイデアを得るには、APIをご覧ください。

答えて

0

children()メソッドは、読み込みたい名前空間の引数をサポートしています。これは、現在の/デフォルトの名前空間にない要素を読みたい場合に必要です。

$xmldata = <<<'XML' 
<?xml version="1.0"?> 
<foobar xmlns:x="http://example.org/"> 
    <abc>test</abc> 
    <x:def>content</x:def> 
</foobar> 
XML; 
$xml = new Simplexmlelement($xmldata); 
$other = $xml->children('http://example.org/'); 
var_dump((string)$other->def); 

この意志出力値"content"が、表現$xml->defを使用しません、それは現在/デフォルトの名前空間ではないので。

+0

が、私はそれを試してみるませんでした。 – user45437

0

あなたはプロパティには、例えば:が含まれている場合、あなたが探している値がhttps://seekingalpha.com/api/1.0名前空間にある

->{'sa:author_name'} 

中括弧を使用することができます。 あなたはSimpleXMLElementchildrenを使用し、TE名前空間を追加することもできます。

$authorName = (string)$xml->channel->item[$i]->children('https://seekingalpha.com/api/1.0')->{'author_name'}; 

それともxpathを使用することができます。例えば

$authorName = (string)$xml->channel->item[$i]->xpath('sa:author_name')[0]; 

$jsonArray = array(); 
for ($i = 0; $i < 5; $i++) { 
    $newsHeadline = $xml->channel->item[$i]->title->__toString(); 
    $newsLink = $xml->channel->item[$i]->link->__toString(); 
    $publishedDate = $xml->channel->item[$i]->pubDate->__toString(); 
    $authorName = (string)$xml->channel->item[$i]->xpath('sa:author_name')[0]; 
    // or xpath 
    // $authorName = (string)$xml->channel->item[$i]->children('https://seekingalpha.com/api/1.0')->{'author_name'}; 
    $temp = array('Title' => $newsHeadline, 'Link' => $newsLink, 'Publish' => $publishedDate, 'Author' => $authorName); 
    array_push($jsonArray, $temp); 
} 

$jsonNews = json_encode($jsonArray); 

print_r($jsonArray); 

はあなたを与えるだろう:最初の答えは答えのために、me.Anywayのための感謝を働いたので

Array 
(
    [0] => Array 
     (
      [Title] => Apple acknowledges iPhone X issue in some devices, plans fix 
      [Link] => https://seekingalpha.com/symbol/AAPL/news?source=feed_symbol_AAPL 
      [Publish] => Fri, 10 Nov 2017 12:04:42 -0500 
      [Author] => Brandy Betz 
     ) 
     etc... 
関連する問題