Как выполнить XQuery в PHP ? Можете ли вы привести мне пример?
Спасибо.
пакет груши: http://www.pecl.php.net/package/Zorba (ссылка 404)
NEW (2011): http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery
zorba: http://www.zorba-xquery.com/
zorba docs – простой пример:
//Include for the Object-Oriented API require 'zorba_api.php'; //Initialization of Zorba store $store = InMemoryStore::getInstance(); //Initialization of Zorba $zorba = Zorba::getInstance($store); $xquery = <<< EOT let $message := 'Hello World!' return <results> <message>{$message}</message> </results> EOT; //Compile the query $lQuery = $zorba->compileQuery($xquery); //Run the query… echo $lQuery->execute(); //…and destroy it $lQuery->destroy(); //Shutdown of Zorba $zorba->shutdown(); //Shutdown of Zorba store InMemoryStore::shutdown($store);
PHP не имеет собственных или общих парсеров XML, которые поддерживают XQuery (если я ошибаюсь, кто-то мне сообщил). Однако он имеет два довольно стандартных расширения, которые обрабатывают запросы XPath.
Я лично считаю, что simplexml
лучше всех. Вы просто использовали бы:
$xml = new simplexml($some_xml_string); $xpath_results = $xml -> Xpath("//a/b");
И затем проведите через результаты.
Обширный класс DOM также поддерживает запросы Xpath. Единственное реальное преимущество, насколько я вижу, в использовании DOM заключается в том, что результаты могут быть изменены или удалены прямо из большего XML-объекта.
Удачи.
Используйте BaseX. Его стабильная, масштабируемая и быстрая! (но вам нужен сервер для запуска)
Клиенты BaseX
include("BaseXClient.php"); $session = new Session("localhost", 1984, "admin", "admin"); print $session->execute("xquery 1 to 10"); $session->close();
вinclude("BaseXClient.php"); $session = new Session("localhost", 1984, "admin", "admin"); print $session->execute("xquery 1 to 10"); $session->close();
Эта страница находится в http://phpxmlclasses.sourceforge.net/, у которой есть класс XQuery Lite:
PHP-реализация языка Xquery Lite 1.0, язык для запроса XML-документов на основе Xquery 1.0. Этот класс основан на расширении DOM и позволяет выполнять запросы Xquery Lite для XML-документов в файлах, php-строках или комбинациях.
Я никогда не использовал его и не знаю, как он работает.
его также возможно с DOMDocument и DOMXPath
$doc = new DOMDocument(); $doc->load('http://www.example.com/some.xml'); $xpd = new DOMXPath($doc); false&&$node = new DOMElement();//this is for my IDE to have intellysense $result = $xpd->query('//a/b'); foreach($result as $node){ echo $node->nodeName.'<br />'; }
Следующая ссылка должна быть полезна: http://dl.dropbox.com/u/1487285/php/php.html
<?php require_once 'Zorba/XQueryProcessor.php'; $xquery = new XQueryProcessor(); $query = <<<'XQ' declare variable $world external; <h1>Hello {$world}</h1> XQ; $xquery->importQuery($query); $xquery->setVariable('world', 'World!'); echo $xquery->execute(); ?>
Для сценариев совместного размещения я предлагаю использовать что-то вроде 28msec (http://www.28msec.com), которое позволяет вам создавать службы RESTful на основе процессора Zorba XQuery. С PHP вы можете подключиться к 28 мс через REST.
Вы посмотрели http://www.pecl.php.net/package/Zorba ?