首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php -使用SimpleXML解析OAI PMH文件

php -使用SimpleXML解析OAI PMH文件
EN

Stack Overflow用户
提问于 2012-04-26 15:08:32
回答 1查看 2K关注 0票数 3

我正在尝试解析这个文件:使用SimpleXML的http://mdc.cbuc.cat/cgi-bin/oai.exe?verb=ListRecords&metadataPrefix=oai_dc&set=afcecemc&from=2011-06-21&until=2011-06-21

我可以得到所有的元素,除了那些在标签中的元素。它说标签是空的。这是我的代码。

代码语言:javascript
复制
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());
}

但是输出是这样的:

代码语言:javascript
复制
[...]
["metadata"]=>
  object(SimpleXMLElement)#8 (0) {
}

该元素不为空!我知道这个解决方案与使用“名称空间”有关,但我不知道如何让它工作。

如有任何帮助,我们将不胜感激!谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-26 15:26:25

要访问具有自己名称空间的子项,您必须告诉SimpleXMLElement您不希望子项使用默认语言。参见SimpleXMLElement::children

您链接的文档使用了多个名称空间,因此如果您是新手,可能会有点困惑。

下面是一些示例代码,它扩展了您的代码(并简化了加载,但我认为您理解它),以访问第一个记录元素中的子元素(我中断了循环):

代码语言:javascript
复制
$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;
}

这将给出以下输出,我猜这就是您要查找的内容:

代码语言:javascript
复制
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"
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10328716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档