在最后一天,我在 PHP 中进行了一些 XML 解析。我使用外部服务通过 XML 向我提供基于 ISBN 作为搜索词的图书信息(德国国家图书馆提供的服务,需要在请求中包含私人令牌(这不是问题的原因,我已经检查过了)-> https://www.dnb.de/EN/Professionell/Metadatendienste/Datenbezug/SRU/sru_node.html | 我还检查了在 php.ini 中启用了“allow_url_fopen”) .
现在,我的问题是,无论我使用必要的书籍信息进行 XML 解析的任何方法都不会显示,并且我无法在简单 XML 元素对象中使用它(请参阅下面这个屏幕截图中我的代码中的第二个“回声”的结果)。如果我首先将 XML 作为字符串提取,则信息是可见且可访问的(请参阅此屏幕截图中下面代码中第一个“回显”的结果)。目标是能够根据书籍的元素名称(dc:title、dc:creator、dc:publisher、dc:date 等)单独访问有关书籍的信息。在我当前的一段代码中,这是不可能的,因为 PHP 在运行“foreach”循环时会告诉我:“警告:main():节点不再存在”。
我已经看过几篇关于简单 XML 元素对象中命名空间问题的 Stack Overflow 帖子,但我无法针对我在这里面临的问题调整那里提出的解决方案。
我希望有人可以帮助我解决这个问题并指出解决方案,这样我就可以访问 XML 的“dc”命名空间中的信息。
这是我迄今为止使用过的非常简短的 PHP 代码:
$request = file_get_contents("http://externalXML.com"); //URL was replaced
echo "<pre>"; print_r($request); echo "</pre>";
$xml = simplexml_load_string($request);
echo "<pre>"; print_r($xml); echo "</pre>";
foreach ($xml->records->record->recordData->dc->children() as $child) {
echo "Inhalt: " . $child . "<br>";
}
这是 XML 的内容(因为我一直在寻找唯一的 ISBN(请参阅“查询”元素),结果只能没有或只有一个,但绝不会更多):
<searchRetrieveResponse>
<version>1.1</version>
<numberOfRecords>1</numberOfRecords>
<records>
<record>
<recordSchema>oai_dc</recordSchema>
<recordPacking>xml</recordPacking>
<recordData>
干杯,蒂莫