我一直在网站上阅读很多XQUERY教程。几乎所有人都在教我XQUERY语法。假设我已经理解了XQUERY语法,我将如何在我的网站上实际实现XQUERY?
例如,我有 book.xml :
<?xml version="1.0" encoding="iso-8859-1" ?>
<books>
<book>
<title>Doraemon</title>
<authorid>1</authorid>
</book>
<book>
<title>Ultraman</title>
<authorid>2</authorid>
</book>
</books>
然后,我有 author.xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<authors>
<author id="1">Mr A</author>
<author id="2">Mr B</author>
</authors>
我想生成如下所示的HTML:
<table>
<tr> <td>Title</td> <td>Author</td> </tr>
<tr> <td>Doraemon</td> <td>Mr A</td> </tr>
<tr> <td>Ultraman</td> <td>Mr B</td> </tr>
</table>
请给我举个例子。或者我可以参考的任何网站。非常感谢。
答案 0 :(得分:4)
(: file: titles.xqy :)
<table>
<tr><th>title</th><th>author</th></tr>
{
let $books-doc := doc("books.xml")
let $authors-doc := doc("authors.xml")
for $b in $books-doc//book,
$a in $authors-doc//author
where $a/@id = $b/authorid
return
<tr>
<td>{$b/title/text()}</td>
<td>{$a/text()}</td>
</tr>
}
答案 1 :(得分:3)
您需要服务器或库来将xml处理为html。在我看来,当你处理任何稍微复杂的东西时,XQuery在这方面要比XSTL好得多。它也是一种更清晰的语言。该网站有a nice list of XQuery processors。
答案 2 :(得分:2)
XQuery与SQL类似,它允许您从大型数据存储库中检索特定的数据部分。 SQL用于关系数据库(MS SQL Server,Oracle,Sybase,MySQL,PostreSQL,SQLite等),XQuery用于XML数据库(MARKLogic,Sedena,Qexo,Qizx / db等)。
MARKLogic为您提供XDB服务器和HTTP服务器。您可以拥有一个典型的Web服务器并通过XDB连接到MARKLogic,或者您可以使用他们的HTTP服务器并直接将您的XQuery与HTML混合。
我建议下载MARKLogic的开发者服务器(允许100MB文件)并尝试一下。
答案 3 :(得分:1)
说实话,也许你根本不需要使用XQuery。
如果您需要将中等复杂的XML文档从XML转换为HTML,我建议使用XSL。就个人而言,我发现XSL比XQuery更容易学习。还有大量的在线可用示例和教程,因为XSL的使用时间更长。
我们目前只使用XQuery,因为它是我们获得许可的专用XML软件的一部分。 XQuery是从大型存储库中选择XML片段的绝佳工具,但我们仍然使用XSL来转换文档。
答案 4 :(得分:1)
答案 5 :(得分:1)
在网站开发设置中使用XQuery可能有很多场景:
动态生成页面:
您需要一个提供API的库,您可以从服务器端代码调用该API,如果您的XML数据存储在传统数据库或文件系统中,则会出现这种情况。例如:Zorba为PHP提供了这样的API,还有用于Java的XQuery API等。
如果您的XML数据存储在支持XQuery的XML数据库服务器中,那么您将向服务器发出XQuery查询并返回结果。此类别中有许多开源和商业产品。 BaseX是一个开源示例。
静态生成网页
您可能希望从XML数据静态生成一些HTML页面。在这种情况下,您可以运行命令行XQuery实用程序,例如Zorba,Saxon,BaseX和许多其他提供此类CLI工具。或者您也可以使用API从您自己的脚本中执行此操作。
然后,您将在构建系统中定义规则,以便在XML数据发生更改时执行这些命令或脚本。
在静态和动态方法中,您可以设置环境以便XQuery与模板系统一起播放,例如,不是通过XQuery生成整个HTML页面,而是可以基于XML生成HTML段,然后插入将它们放入模板中。
使用转换以外的其他内容:
以上案例是关于将XML转换为HTML,但XQuery可以在Web开发过程中以其他方式使用。我发现它有用的一种方法是修改XML文档。假设您有一个很长的XML文档,并且您想要修改字段值或添加字段或属性 - 您可以使用XQuery Update Facility扩展来实现这一目标。
希望这会有所帮助。我没有讨论你的例子,因为我认为这只是为了澄清。
答案 6 :(得分:0)
<table>
<tr><td>Title<td><td>Author<td></tr>
{
let $authordoc := fn:doc("author.xml")
for $book in fn:doc("book.xml")/books/book
return
<tr>
<td>{ $book/title }</td>
<td>{ $authordoc/authors/author/[@id eq $book/authorid] }</td>
</tr>
}
</table>
ps:没有测试/执行它,但这就是一个解决方案的样子