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

时间:2011-09-05 20:58:12

标签: php simplexml

我一直在疯狂使用SimpleXML试图将值变为可用的PHP变量,这让我感到疯狂。

我真诚地希望你们中的一些更有才华的编码员可以帮助我... 我会尽我所能......

我正在使用Open Patent Service 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...
 } ?>

如果您看到网址... http://ops.epo.org/2.6.2/rest-services/published-data/publication/epodoc/EP2359415/biblio

您将看到XML返回的复杂程度。 基本上我不能通过php循环从数据中获取任何值......

任何帮助将不胜感激...... 迪安

2 个答案:

答案 0 :(得分:2)

我知道这是一个老问题,但我永远无法让SimpleXML做任何事情。鉴于这是谷歌搜索中唯一一个关于在PHP中使用欧洲专利OFfice API的内容,我想我会记录对我有用的内容......

以下是我如何解决它:

# 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_array)。请注意,这与我的代码类似,但不完全相同 - 如果你剪切/粘贴,你可能需要调整它...当然,你仍然需要弄清楚如何处理由委员会设计的荒谬复杂数据结构,但至少它是可以用的形式。

编辑:

在尝试获得更复杂的结果时,很明显EPO数据不是严格的XML。 SimpleXML&amp;上述代码在尝试解析结果时都不执行任何操作。解决方案是使用容错的DOM XML解析器。我使用的代码在这里描述:http://set.cooki.me/archives/225/php-dom-xml-to-array

答案 1 :(得分:0)

$xml = simplexml_load_file($url);
$xml->registerXPathNamespace('os', $url);
foreach ($xml->children() as $child)
{
  // your insertion into database
}