实际如何使用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处理器列表。