2010-02-06 37 views

Trả lời

-1
+0

Dude! Biên dịch chỉ để thực hiện một truy vấn đơn giản ?! Âm thanh như khoa học tên lửa ở đây ... không có gì đơn giản hơn? – abernier

+1

[Gói đó không còn tồn tại trong PECL] (http://www.pecl.php.net/packages.php?catpid=22&catname=XML) – Gordon

6
gói

lê: http://www.pecl.php.net/package/Zorba (lỗi 404 liên kết)

NEW (2011): tài liệu http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery

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

docs zorba cung cấp một ví dụ đơn giản:

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

Nhận xét giống như đối với Dominik (http://stackoverflow.com/questions/ 2211743/execute-a-xquery-with-php # comment-2163837). Thực sự, không có gì đơn giản hơn? – abernier

+0

[Gói đó không còn tồn tại trong PECL] (http://www.pecl.php.net/packages.php?catpid=22&catname=XML) – Gordon

5

PHP không có bất kỳ trình phân tích cú pháp XML gốc hoặc phổ biến nào hỗ trợ XQuery (Nếu tôi sai, ai đó cho tôi biết). Tuy nhiên nó có hai phần mở rộng khá chuẩn để xử lý các truy vấn XPath.

Cá nhân tôi nghĩ rằng simplexml là tốt hơn cả hai. Bạn chỉ cần sử dụng:

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

Và sau đó lặp lại kết quả.

Lớp DOM mở rộng cũng hỗ trợ truy vấn Xpath. Lợi thế thực sự duy nhất, theo như tôi thấy, sử dụng DOM là kết quả có thể được sửa đổi hoặc xóa trực tiếp ra khỏi đối tượng XML lớn hơn.

Chúc may mắn.

+12

XPath không giống với XQuery. – VolkerK

+3

Tôi biết, phải không? Đó có lẽ là lý do tại sao điều đầu tiên tôi nói là PHP không có hỗ trợ riêng cho XQUERY. Tôi đoán lần sau, tôi không nên thêm các giải pháp thay thế hữu ích. – Anthony

+0

Tôi vẫn không nghĩ rằng cho một câu hỏi như chung chung như một xpath này là một thay thế khả thi cho xquery. Ít nhất nó đòi hỏi một số giả định lớn. Nhưng dù sao .... – VolkerK

1

của nó cũng posible với DOMDocument và 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

Có trang này tại http://phpxmlclasses.sourceforge.net/ có một lớp XQuery Lite:

Một thực hiện PHP ngôn ngữ Xquery Lite 1.0, một ngôn ngữ để truy vấn các tài liệu XML dựa trên trên Xquery 1.0 Lớp này dựa trên phần mở rộng DOM và cho phép thực hiện các truy vấn Xquery Lite cho các tài liệu XML trong các tệp, các chuỗi php hoặc các kết hợp.

Tôi chưa bao giờ sử dụng và không biết nó hoạt động như thế nào.

1

Các liên kết sau đây sẽ có ích: 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

Đối với kịch bản lưu trữ chia sẻ, tôi đề nghị sử dụng một cái gì đó giống như 28msec (http://www.28msec.com) cho phép bạn xây dựng các dịch vụ RESTful dựa trên đầu trang của bộ xử lý Zorba XQuery. Từ PHP, bạn có thể kết nối với 28msec qua REST.

2

Sử dụng BaseX. Ổn định, có thể mở rộng và nhanh chóng! (nhưng bạn cần một máy chủ để chạy)

BaseX clients

include("BaseXClient.php"); 

$session = new Session("localhost", 1984, "admin", "admin"); 
print $session->execute("xquery 1 to 10"); 
$session->close(); 
Các vấn đề liên quan