2010-02-06 19 views

Odpowiedz

-1
+0

Dude! Kompilowanie tylko do wykonania prostego zapytania ?! Brzmi jak nauka rakietowa ... nic prostszego? – abernier

+1

[Ten pakiet już nie istnieje w PECL] (http://www.pecl.php.net/packages.php?catpid=22&catname=XML) – Gordon

6

gruszka pakiet: http://www.pecl.php.net/package/Zorba (błąd 404 Link)

NEW (2011): dokumentacja http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery

zorba: http://www.zorba-xquery.com/

Zorba docs zapewniają prosty przykład:

//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); 
+0

Ten sam komentarz, co w przypadku Dominik (http://stackoverflow.com/questions/ 2211743/execute-a-xquery-with-php # comment-2163837). Naprawdę, nic prostszego? – abernier

+0

[Ten pakiet już nie istnieje w PECL] (http://www.pecl.php.net/packages.php?catpid=22&catname=XML) – Gordon

5

PHP nie ma żadnych rodzimych lub popularnych parserów XML obsługujących XQuery (jeśli się mylę, ktoś mi dał znać). Ma jednak dwa dość standardowe rozszerzenia obsługujące zapytania XPath.

Osobiście uważam, że simplexml jest lepszy z dwóch. Po prostu użyjesz:

$xml = new simplexml($some_xml_string); 
$xpath_results = $xml -> Xpath("//a/b"); 

A następnie przejrzyj wyniki.

Rozbudowana klasa DOM obsługuje również zapytania Xpath. Jedyną prawdziwą zaletą, jeśli chodzi o to, że korzystam z DOM, jest to, że wyniki mogą być modyfikowane lub usuwane bezpośrednio z większego obiektu XML.

Powodzenia.

+12

XPath to nie to samo co XQuery. – VolkerK

+3

Wiem, prawda? Pewnie dlatego pierwszą rzeczą, którą powiedziałem, było to, że PHP nie ma natywnej obsługi XQUERY. Przypuszczam, że następnym razem nie powinienem dodawać pomocnych alternatywnych rozwiązań. – Anthony

+0

Nadal nie sądzę, że na pytanie tak ogólne, jak ten jeden xpath jest realną alternatywą dla xquery. Przynajmniej wymaga to pewnych dużych założeń. Ale w każdym razie .... – VolkerK

1

jej również posible z DOMDocument i 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 />'; 
} 
1

Jest to strona na http://phpxmlclasses.sourceforge.net/ że ma klasę XQuery lite:

Implementacja PHP język Xquery Lite 1.0, język służący do odpytywania dokumentów XML on Xquery 1.0 Ta klasa jest oparta na rozszerzeniu DOM i pozwala na wykonywanie kwerend Xquery Lite dla dokumentów XML w plikach, łańcuchach lub kombinacjach PHP.

Nigdy go nie używałem i nie wiem, jak to działa.

1

Poniższy link powinien być przydatny: 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(); 
?> 
1

Dla współdzielonych scenariuszy hostingu, proponuję użyć czegoś podobnego 28msec (http://www.28msec.com), która pozwala budować relaksującego usług opartych na górze procesora Zorba XQuery. Z PHP można połączyć się z 28 ms przez REST.

2

Użyj BaseX. Jest stabilny, skalowalny i szybki! (ale trzeba uruchomić serwer)

BaseX clients

include("BaseXClient.php"); 

$session = new Session("localhost", 1984, "admin", "admin"); 
print $session->execute("xquery 1 to 10"); 
$session->close();