0

以下はコードです。xmlファイルから抽出されたデータをcsvにフォーマットしようとしています。デフォルトでは、行ごとに挿入されます。見やすく、分かりやすい表現を心掛けています。私はプロのコーダーではないので、私のソリューションが最適化されていない場合はご容赦ください。

<?php
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="DynaMedResult.csv"');

//Using esearch utility capture WebEnv variable
$url= "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=DynaMed&usehistory=y&retmode=xml";
$xml = file_get_contents($url, false, $context); //Reads entire file into a string
$xml = simplexml_load_string($xml);

foreach ($xml->WebEnv as $WebenvSearch){
   $WebEnv=$WebenvSearch;  
}
//Using efetch utility and passing WebEnv variable parse the xml
$url= "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&term=DynaMed&WebEnv=$WebEnv&query_key=1&usehistory=y&retmode=xml";
$xml = file_get_contents($url, false, $context);
$xml = simplexml_load_string($xml); //Interprets a string of XML into an object
$fp = fopen('php://output', 'w');

foreach ($xml as $pubmedst){
    $article=$pubmedst->MedlineCitation->Article->ArticleTitle;
    $pmid=$pubmedst->MedlineCitation->PMID;
    $journal1=$pubmedst->MedlineCitation->MedlineJournalInfo->MedlineTA;
    $journal2=$pubmedst->MedlineCitation->MedlineJournalInfo->NlmUniqueID;
    $pubyear=$pubmedst->MedlineCitation->Article->Journal->JournalIssue->PubDate->Year;
    $pubmonth=$pubmedst->MedlineCitation->Article->Journal->JournalIssue->PubDate->Month;
    $pubday=$pubmedst->MedlineCitation->Article->Journal->JournalIssue->PubDate->Day;
    $authorl=$pubmedst->MedlineCitation->Article->AuthorList->Author->LastName;
    $authorf=$pubmedst->MedlineCitation->Article->AuthorList->Author->ForeName;
    $authori=$pubmedst->MedlineCitation->Article->AuthorList->Author->Initials;

    $val1 = explode("\n", $article);
    fputcsv($fp, $val1); //Format line as CSV and write to file pointer
    $val2 = explode("\n", $pmid); //Splits a string by string in our case a newline    
    fputcsv($fp, $val2);
    $val3 = explode("\n", $journal1.=$journal2);
    fputcsv($fp, $val3);
    $val4 = explode("\n", $authorl.=$authorf);
    fputcsv($fp, $val4);
    $val5 = explode("\n", $pubyear.=$pubmonth);
    fputcsv($fp, $val5);
}

fclose($fp);
?>
4

1 に答える 1

0

fputcsv ()のドキュメントによると、csv データとして出力されるデータのARRAYfputcsv()が与えられることを期待しています。個々の文字列を渡すため、各文字列は 1 列の CSV ファイルの単一の「フィールド」になります。

データの配列を作成してから、配列を出力する必要があります。

$data[0] = 'foo';
$data[1] = 'bar';
$data[2] = 'baz';

fputcsv($fp, $data);

生産します

foo,bar,baz
于 2013-10-22T16:25:08.420 に答える