Разбор сложного XML, возвращенного из базы данных патентов OPS с использованием PHP и SimpleXML - PullRequest
3 голосов
/ 06 сентября 2011

Я схожу с ума от SimpleXML, пытающегося получить значения в полезные переменные PHP, и это сводит меня с ума.

Я искренне надеюсь, что некоторые из вас, более талантливые программисты, могут помочь мне ...будет настолько тщательным, насколько я могу ...

Я использую API Open Patent Service.Используя следующий 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...
 } ?>

Если вы увидите URL-адрес ... http://ops.epo.org/2.6.2/rest-services/published-data/publication/epodoc/EP2359415/biblio

Вы увидите, насколько сложноXML возвращается.В принципе, я не могу получить какие-либо значения из данных через php-циклы ...

Любая помощь будет принята с благодарностью ... Дин

Ответы [ 2 ]

2 голосов
/ 13 июня 2013

Я знаю, что это старый вопрос, но я никогда не мог заставить SimpleXML что-либо сделать. Учитывая, что это единственное, что появляется в поиске Google об использовании API европейского патента OFfice с 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_array), который вы можете перебирать. Обратите внимание, что это похоже на мой код, но не совсем то же самое - вам, возможно, придется настроить его, если вы вырезаете / вставляете ... Конечно, вам все равно придется выяснить, что делать с нелепо сложным, разработанным комитетом структура данных, но, по крайней мере, в изменяемой форме.

Edit:

При попытке получить более сложные результаты выяснилось, что данные EPO не являются строгими XML. SimpleXML и приведенный выше код ничего не делают при попытке анализа результатов. Решением было использование анализатора XML DOM, который является отказоустойчивым. Код, который я использовал, описан здесь: http://set.cooki.me/archives/225/php-dom-xml-to-array

0 голосов
/ 09 сентября 2011
$xml = simplexml_load_file($url);
$xml->registerXPathNamespace('os', $url);
foreach ($xml->children() as $child)
{
  // your insertion into database
}
...