使用PHP&;解析OPS专利数据库返回的复杂XML;SimpleXML

使用PHP&;解析OPS专利数据库返回的复杂XML;SimpleXML,php,simplexml,Php,Simplexml,SimpleXML试图将值转换成可用的PHP变量,这让我发疯 我真诚地希望你们中一些更有才华的程序员能帮助我。。。 我会尽可能彻底的 我使用的是开放式专利服务API。使用下面的URL,我可以轻松地生成一个包含所有所需数据的格式化XML文件 <?php // Patent Reference Number $ref = "EP2359415"; // URL for XML response $url = "http://ops.epo.org/2.6.2/rest-services/

SimpleXML试图将值转换成可用的PHP变量,这让我发疯

我真诚地希望你们中一些更有才华的程序员能帮助我。。。 我会尽可能彻底的

我使用的是开放式专利服务API。使用下面的URL,我可以轻松地生成一个包含所有所需数据的格式化XML文件

<?php

// Patent Reference Number
$ref = "EP2359415";

// URL for XML response
$url =  "http://ops.epo.org/2.6.2/rest-services/published-data/publication/epodoc/".$ref."/biblio";

// Reading the XML Response
$sitemap = new SimpleXMLElement($url);

// Echo out values from the XML Data
foreach($needhelp as $here) {
   echo "Need Help Here!";
   // Will be taking data and placing into a database here...
 } ?>

如果你看到网址。。。

您将看到返回的XML有多复杂。 基本上,我无法通过php循环从数据中获取任何值

任何帮助都将不胜感激。。。
迪恩

我知道这是一个老问题,但我永远无法让SimpleXML做任何事情。考虑到这是谷歌搜索中关于使用欧洲专利局API和PHP的唯一内容,我想我应该记录下对我有用的东西

我是这样解决的:

# build query url
$patent_url = 'http://ops.epo.org/3.0/rest-services/published-data/search/full-cycle/?q='.urlencode($your_query);

# grab the contents of $patent_url
$patent_raw = file_get_contents($patent_url);

# create an XML parser
$resource = xml_parser_create();

# parse XML into array 
xml_parse_into_struct($resource, $patent_raw, $patent_array);

# close the parser - you want to do this...    
xml_parser_free($resource);
现在您有了一个标准的PHP数组(
$patent\u array
),您可以进行迭代。请注意,这与我的代码类似,但并不完全相同-如果您剪切/粘贴。。。当然,您仍然需要弄清楚如何处理由委员会数据结构设计的复杂得可笑的数据结构,但至少它是以可伪造的形式存在的

编辑:


在试图获得更复杂的结果时,很明显EPO数据不是严格的XML。SimpleXML&上述代码在试图解析结果时都不做任何事情。解决方案是使用DOM XML解析器,它是容错的。我使用的代码如下所述:

您提供的URL只返回服务器上未找到请求文档的消息。为了我。你确定这是对的吗?
# build query url
$patent_url = 'http://ops.epo.org/3.0/rest-services/published-data/search/full-cycle/?q='.urlencode($your_query);

# grab the contents of $patent_url
$patent_raw = file_get_contents($patent_url);

# create an XML parser
$resource = xml_parser_create();

# parse XML into array 
xml_parse_into_struct($resource, $patent_raw, $patent_array);

# close the parser - you want to do this...    
xml_parser_free($resource);