当前位置: 首页 > 知识库问答 >
问题:

解析SRU XML的最简单方法?

阎京
2023-03-14

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

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

http://explor.bcu.ac.uk/IntraLibrary-SRU?operation=searchRetrieve

此对公共存储库的查询返回符合SRU标准的格式良好的XML文档(它进行验证),在本例中返回两条记录。我使用过各种排列的simplexml\u load\u string()和SimpleXMLElement()方法,运行print\r和var\u 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 ( )

如果我将打印替换为:

echo $xml -> asXML();

我至少得到一个长字符串的XML数据。

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

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

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

因此,我不能使用以下代码

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

因为这会在分号上抛出语法错误。

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

用php解析XML(SRU)

如何解析从SRU检索到的XML文档?

http://us3.php.net/SimpleXMLElement

并在谷歌上搜索"php parse sru xml"。在我迷失在XML中之前,如果有人能给我指出正确的方向,我将不胜感激。

共有1个答案

连德义
2023-03-14

名称空间由xmlns在XML中定义,类似于xmlns:SRW=”http://www.loc.gov/zing/srw/"

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

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

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

 类似资料:
  • 问题内容: 我需要通过Qt解析JSON对象。最简单/最快的方法是什么? 问题答案: 试试QJson。 QJson是积极开发的(如果没有记错的话,将由KDE使用)。最好的办法是直接签出源代码并自己构建。没有对QJson的依赖(Qt和CMake除外)。使用起来也很简单,请看一些用法示例: http://qjson.sourceforge.net/usage/

  • 问题内容: 我正在尝试解析WSDL以获取操作,端点和示例有效负载。用户输入的WSDL。我找不到执行此操作的教程。 我只能找到那些生成不需要的源代码的代码。我尝试使用XBeans,但显然我需要Saxon。没有撒克逊人,有没有简单的轻巧的方法来做到这一点? 例如 应该进行操作:GetLastTradePrice,GetLastTradePrice 端点:StockQuotePort 有效负载样本: 这

  • 本文向大家介绍Python解析最简单的验证码,包括了Python解析最简单的验证码的使用技巧和注意事项,需要的朋友参考一下 最近在学python,正好遇到学校需要选宿舍,就用python写了一个抢宿舍的软件。其中有一个模块是用来登陆的,登陆的时候需要输入验证码,不过后来发现了直接可以绕过验证码直接登陆的bug。不过这是另外的话题,开始的时候我并没有发现这个隐藏起来的秘密,所以我就写了这个pytho

  • 问题内容: 剖析PHP脚本的最简单方法是什么? 我喜欢在上面显示一些内容,这些内容可以显示所有函数调用的转储以及它们花费了多长时间,但我也可以在特定函数周围添加一些内容。 我尝试使用microtime函数进行实验: 但这有时给我负面的结果。另外,在我的代码中撒满代码也很麻烦。 问题答案: 所述PECL APD扩展的使用如下: 之后,使用解析生成的文件。 输出示例: 警告:APD的最新版本为2004

  • 问题内容: 我正在用Java替代传统应用程序。要求之一是必须将旧应用程序使用的ini文件原样读取到新的Java应用程序中。此ini文件的格式是常见的Windows样式,带有标头部分和键=值对,使用#作为注释字符。 我尝试使用Java中的Properties类,但是如果不同的标头之间存在名称冲突,那当然是行不通的。 因此,问题是,读取此INI文件和访问密钥的最简单方法是什么? 问题答案: 我正在用J

  • 我正在为web服务编写一个Java客户端,需要将响应JSON对象解析为