实际如何使用XQUERY?
时间:2020-03-05 18:58:10 来源:igfitidea点击:
我已经在网站上阅读了很多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>
请给我看一些例子。或者我可以参考的任何网站。非常感谢。
解决方案
回答
<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:尚未测试/执行,但这是一种解决方案的样子
回答
(: 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> }
回答
老实说,也许我们根本不需要使用XQuery。
如果需要将适度复杂的XML文档从XML转换为HTML,我建议使用XSL。就个人而言,我发现XSL比XQuery更易于学习。由于XSL出现的时间更长,因此在线上也有大量的示例和教程。
目前,我们仅使用XQuery是因为它已作为我们许可的专用XML软件的一部分而必需。 XQuery是从大型存储库中选择XML片段的绝佳工具,但是我们仍然使用XSL来转换文档。
回答
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的文档)并尝试一下。
回答
我们需要服务器或者库来将xml处理为html。在我看来,当我们处理稍微复杂的事情时,XQuery在这方面比XSTL好得多。它也是一种更简洁的语言。这个网站上有不错的XQuery处理器列表。