2012-04-26 6 views
3

私はこのファイルを解析しようとしています:http://mdc.cbuc.cat/cgi-bin/oai.exe?verb=ListRecords&metadataPrefix=oai_dc&set=afcecemc&from=2011-06-21&until=2011-06-21 SimpleXMLを使用しています。php - SimpleXMLを使用してOAI PMHファイルを解析する

タグの中にある要素以外はすべて取得できます。タグが空であると表示されます。ここに私のコードです。

function getXMLfile($URL) { 
    $chDyn = curl_init(); 
    curl_setopt ($chDyn, CURLOPT_URL, $URL); 
    curl_setopt($chDyn, CURLOPT_RETURNTRANSFER, 1); 
    $xml = curl_exec($chDyn); 
    curl_close($chDyn); 

    try { 
     $xmlObj = new SimpleXMLElement($xml); 
    } 
    catch (Exception $e) { echo $e; } 

    return $xmlObj; 
} 


$cdmURL = "http://mdc.cbuc.cat/cgi-bin/oai.exe?verb=ListRecords&metadataPrefix=oai_dc&set=afcecemc"; 

$xmlObj = getXMLfile($cdmURL); 
$xmlNode = $xmlObj->ListRecords; 

foreach ($xmlNode->record as $rNode) { 
    var_dump($rNode->children()); 
} 

しかし、出力はこの1つである:

[...] 
["metadata"]=> 
    object(SimpleXMLElement)#8 (0) { 
} 

この要素は空ではありません!私は解決策が何とか "ネームスペース"の使用に関連していることを知っていますが、それを動作させる方法を理解できません。

ご了承ください。おかげさまで

+0

投稿するXML文字列。 – MrCode

答えて

3

独自の名前空間を持つ子にアクセスするには、子どもがデフォルトの言語でないようにすることをSimpleXMLElementに伝える必要があります。 SimpleXMLElement::childrenを参照してください。

リンクしたドキュメントは複数の名前空間を使用します。新しいドキュメントの場合は、少し混乱している可能性があります。

次は、最初のレコード要素(私はループを破る)内部の子どもたちへのアクセスにあなたを拡張(およびロードビットを簡素化しますが、私はあなたがそれを理解すると思います)いくつかのサンプルコードです:

$url = 'http://mdc.cbuc.cat/cgi-bin/oai.exe?verb=ListRecords&metadataPrefix=oai_dc&set=afcecemc&from=2011-06-21&until=2011-06-21'; 

$xmlObj = simplexml_load_file($url); 

$xmlNode = $xmlObj->ListRecords; 

foreach ($xmlNode->record as $rNode) { 
    var_dump($rNode->children()); 
    var_dump($rNode->metadata->children('oai_dc', 1)); 
    var_dump($rNode->metadata->children('oai_dc', 1)->dc->children('dc', 1)); 
    break; 
} 

をこれは、あなたが探しているものだと思う次の出力を与えます:

object(SimpleXMLElement)#7 (2) { 
    ["header"]=> 
    object(SimpleXMLElement)#9 (3) { 
    ["identifier"]=> 
    string(29) "oai:mdc.cbuc.cat:afcecemc/521" 
    ["datestamp"]=> 
    string(10) "2011-06-21" 
    ["setSpec"]=> 
    string(8) "afcecemc" 
    } 
    ["metadata"]=> 
    object(SimpleXMLElement)#10 (0) { 
    } 
} 
object(SimpleXMLElement)#10 (1) { 
    ["dc"]=> 
    object(SimpleXMLElement)#8 (0) { 
    } 
} 
object(SimpleXMLElement)#7 (12) { 
    ["title"]=> 
    string(12) "Puig d'Assas" 
    ["creator"]=> 
    string(26) "Gallardo i Garriga, Antoni" 
    ["date"]=> 
    string(19) "[Entre 1912 i 1928]" 
    ["relation"]=> 
    array(2) { 
    [0]=> 
    string(72) "Paper; gelatina i plata; positiu; blanc i negre; horitzontal; 12 x 17 cm" 
    [1]=> 
    string(27) "Estudi de la Masia Catalana" 
    } 
    ["subject"]=> 
    string(9) "Muntanyes" 
    ["coverage"]=> 
    string(32) "Puig d'Assas ; Osona ; Catalunya" 
    ["description"]=> 
    array(2) { 
    [0]=> 
    string(2) "Bo" 
    [1]=> 
    string(163) "Títol atorgat pel catalogador. Informació extreta dels àlbums de l'EMC: Situació: Puig d'Assas. Facilitada per: Antoni Gallardo i Garriga. Facilitada en: 1928." 
    } 
    ["publisher"]=> 
    string(33) "Centre Excursionista de Catalunya" 
    ["source"]=> 
    string(29) "Memòria Digital de Catalunya" 
    ["type"]=> 
    string(5) "Image" 
    ["rights"]=> 
    string(49) "http://creativecommons.org/licenses/by-nc-nd/3.0/" 
    ["identifier"]=> 
    string(35) "http://mdc.cbuc.cat/u?/afcecemc,521" 
} 
+0

ありがとうございます、それは十分にうまく動作します!すばやくクリア! – EnPep

+0

優秀!!完全に動作します。残りのコードと混在しています: '$ metatemp = $ rNode-> metadata-> children( 'oai_dc'、1) - > dc-> children( 'dc'、1); $結果[$ i] ["メタデータ"] [$メタデータ] =(文字列)$データ; foreach($メタデータとして$メタデータ=> $データ){ $結果[$ i] } ' – elporfirio

関連する問題