使用 PHP 执行 XQuery
Posted
技术标签:
【中文标题】使用 PHP 执行 XQuery【英文标题】:Execute a XQuery with PHP 【发布时间】:2011-01-13 18:44:57 【问题描述】:如何在php 中执行XQuery?可以举个例子吗?
谢谢。
【问题讨论】:
【参考方案1】:PHP 没有任何支持 XQuery 的本机或通用 XML 解析器(如果我错了,请告诉我)。然而,它确实有两个非常标准的扩展来处理 XPath 查询。
我个人认为simplexml
是两者中的佼佼者。您只需使用:
$xml = new simplexml($some_xml_string);
$xpath_results = $xml -> Xpath("//a/b");
然后循环遍历结果。
扩展的 DOM 类也支持 Xpath 查询。在我看来,使用 DOM 的唯一真正优势是可以直接从较大的 XML 对象中修改或删除结果。
祝你好运。
【讨论】:
XPath 与 XQuery 不同。 我知道,对吧?这可能就是为什么我说的第一件事是 PHP 没有对 XQUERY 的原生支持。我想下一次,我不应该添加有用的替代解决方案。 我仍然不认为对于像这个 xpath 这样通用的问题是 xquery 的可行替代方案。至少它需要一些大的假设。但无论如何.... 很公平。基本上指向 XPath 只是为了让他们免去我使用 PHP 和 XML 的旅程,在那里我阅读了一些 XML 标准技术,感到兴奋,发现它在 PHP 中是某种支持的,并且即使那样也不是没有重新编译。 XQuery、XSLT、SOAP/WSDL、XPath 和我一起发生,我相信它会再次发生。不是讨厌 PHP,只是说 XML 会让人心碎,所有的承诺都是巨大的。 对此我完全同意。 “XML 就像暴力。如果它不能解决你的问题,你就没有充分利用它”。一方面,它被滥用得太频繁,另一方面,它经常与低于标准的工具一起使用。奇怪的是,这两种情况在同一个项目(或公司)中经常出现。 |并查找 abernier 的后续问题,似乎 xpath 成功了。【参考方案2】:梨包:http://www.pecl.php.net/package/Zorba(错误404链接)
新(2011 年):http://www.zorba-xquery.com/html/entry/2011/12/27/PHP_Meets_XQuery
zorba 文档:http://www.zorba-xquery.com/
zorba 文档提供了一个简单的示例:
//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);
【讨论】:
与 Dominik (***.com/questions/2211743/…) 的评论相同。真的,没有比这更简单的了? That package no longer exists in PECL【参考方案3】:使用 BaseX。它稳定、可扩展、快速! (但你需要一个服务器来运行)
BaseX clients
include("BaseXClient.php");
$session = new Session("localhost", 1984, "admin", "admin");
print $session->execute("xquery 1 to 10");
$session->close();
【讨论】:
【参考方案4】:它也适用于 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 />';
【讨论】:
【参考方案5】:http://phpxmlclasses.sourceforge.net/ 有这个页面,它有一个 XQuery Lite 类:
http://phpxmlclasses.sourceforge.net/show_doc.php?class=class_xquery_lite.htmlXquery Lite 1.0 语言的 PHP 实现,一种基于 Xquery 1.0 查询 XML 文档的语言 该类基于 DOM 扩展,允许对文件、php 字符串或组合中的 XML 文档执行 Xquery Lite 查询。
没用过,不知道效果如何。
【讨论】:
【参考方案6】:以下链接应该很有用: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();
?>
【讨论】:
【参考方案7】:对于共享主机方案,我建议使用 28msec (http://www.28msec.com) 之类的东西,它使您能够基于 Zorba XQuery 处理器构建 RESTful 服务。 从 PHP 你可以通过 REST 连接到 28 毫秒。
【讨论】:
【参考方案8】:你看过http://www.pecl.php.net/package/Zorba吗?
【讨论】:
老兄!编译只是为了执行一个简单的查询?!听起来像是火箭科学……没有更简单的事了? That package no longer exists in PECL以上是关于使用 PHP 执行 XQuery的主要内容,如果未能解决你的问题,请参考以下文章
使用 JDBC 的 Xquery -- 错误的 SQL 语法