解析SRU XML最简单的方法?

时间:2014-06-16 16:40:54

标签: php xml

我的问题是:用PHP解析SRU请求返回的XML的最简单方法是什么?

例如,在浏览器中查看以下网址:

http://explor.bcu.ac.uk/IntraLibrary-SRU?operation=searchRetrieve&query=gaelic&version=1.1

对公共存储库的此查询返回符合SRU标准的格式良好的XML文档(它已验证),在这种情况下返回两个记录。我玩过simplexml_load_string()的各种排列和SimpleXMLElement()的方法,运行print_r和var_dump,从来没有得到任何可用的东西。例如:

$url = "http://explor.bcu.ac.uk/IntraLibrary-SRU?operation=searchRetrieve&query=gaelic&version=1.1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);   
$file_contents = curl_exec($ch);
$xml = new SimpleXMLElement($file_contents);
print_r($xml);

这只是输出:

SimpleXMLElement Object ( )

如果我用以下内容替换print_r:

echo $xml -> asXML();

我至少将XML数据作为一个长字符串。

我想在print_r中看到的是一个显示所有XML节点的对象/数组,这样我就可以看到所有节点和子节点都是对象表示法。

另外一个问题是返回的XML中的节点具有如下名称:

<SRW:recordSchema>dc</SRW:recordSchema>

所以我不能使用如下代码:

if ($xml -> SRW:recordSchema -> children()

因为这会在分号上引发语法错误。

我不是XML方面的专家。我理解基本结构,并且我已经解析了简单的XML文档(例如在PHP手册“Basic SimpleXML examples”中),但像xPath和命名空间这样的术语超出了我的想象。我看过了:

Parse XML (SRU) with php

How can I parse a XML document retrieved from SRU?

http://us3.php.net/SimpleXMLElement

并使用Google搜索“php parse sru xml”。在我迷失在XML之前,如果有人能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

名称空间在XML中由 xmlns 在xmlns中定义:SRW =“http://www.loc.gov/zing/srw/”

=符号之前的部分(上例中的SRW)充当命名空间的句柄或简写 - 这对于可读性/写入是方便的,以避免编写大量的URL作为实际的命名空间,后面的部分=签名(上面SRW示例中的http://www.loc.gov/zing/srw/)。

因此命名空间的定义遵循模式 xmlns:SHORTHAND = URL

在用于限定元素时,速记出现在元素名称之前,用冒号分隔 例如 SRW:RecordSchema