2010-02-06 42 views

Respuesta

-1
+0

Amigo! ¿Compilando solo para ejecutar una consulta simple? Suena como ciencia de cohetes aquí ... ¿nada más simple? – abernier

+1

[Ese paquete ya no existe en PECL] (http://www.pecl.php.net/packages.php?catpid=22&catname=XML) – Gordon

6
paquete

pera: http://www.pecl.php.net/package/Zorba (enlace error 404)

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

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

docs zorba proporcionan un ejemplo simple:

//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

Mismo comentario que para Dominik (http://stackoverflow.com/questions/ 2211743/execute-a-xquery-with-php # comment-2163837). Realmente, ¿nada más simple? – abernier

+0

[Ese paquete ya no existe en PECL] (http://www.pecl.php.net/packages.php?catpid=22&catname=XML) – Gordon

5

PHP no tiene ningún analizador XML nativo o común que sea compatible con XQuery (si estoy equivocado, alguien me lo dirá). Sin embargo, tiene dos extensiones bastante estándar que manejan consultas XPath.

Personalmente creo que simplexml es el mejor de los dos. Simplemente usaría:

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

Y luego recorra los resultados.

La extensa clase DOM admite consultas de Xpath también. La única ventaja real, hasta donde yo lo veo, para usar DOM es que los resultados se pueden modificar o eliminar directamente del objeto XML más grande.

Buena suerte.

+12

XPath no es lo mismo que XQuery. – VolkerK

+3

Lo sé, ¿verdad? Probablemente sea por eso que lo primero que dije fue que PHP no tiene soporte nativo para XQUERY. Supongo que la próxima vez, no debería agregar soluciones alternativas útiles. – Anthony

+0

Todavía no creo que para una pregunta tan genérica como esta, xpath sea una alternativa viable para xquery. Al menos requiere algunas grandes suposiciones. Pero de todos modos ... – VolkerK

1

su también Posible con DOMDocument y 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

Hay esta página en http://phpxmlclasses.sourceforge.net/ que tiene una clase de XQuery Lite:

Una aplicación PHP de el lenguaje Xquery Lite 1.0, un lenguaje para consultar documentos XML basados en Xquery 1.0 Esta clase se basa en la extensión DOM y permite ejecutar consultas de Xquery Lite para documentos XML en archivos, cadenas php o combinaciones.

Nunca lo he usado y no sé cómo funciona.

1

El siguiente enlace debe ser útil: 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

Para los escenarios de alojamiento compartido, que sugieren que usar algo como 28msec (http://www.28msec.com), que le permite construir los servicios REST basadas encima del procesador Zorba XQuery. Desde PHP puedes conectarte a 28msec a través de REST.

2

Use BaseX. ¡Es estable, escalable y rápido! (pero se necesita un servidor para ejecutar)

BaseX clients

include("BaseXClient.php"); 

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