我的问题是:用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和命名空间这样的术语超出了我的想象。我看过了:
How can I parse a XML document retrieved from SRU?
http://us3.php.net/SimpleXMLElement
并使用Google搜索“php parse sru xml”。在我迷失在XML之前,如果有人能指出我正确的方向,我将不胜感激。
答案 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