7

我在网站上阅读了很多 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>

请给我看一些例子。或者我可以参考的任何网站。非常感谢。

4

7 回答 7

6
(: 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>
}

于 2008-09-18T03:19:17.543 回答
3

您需要一个服务器或一个库来将 xml 处理为 html。在我看来,当您处理任何稍微复杂的事情时,XQuery 在这类事情上比 XSLT 好得多。它也是一种更干净的语言。这个网站有一个很好的 XQuery 处理器列表

于 2008-09-27T19:38:48.967 回答
3

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 的文档)并尝试一下。

于 2008-09-20T22:22:20.907 回答
2

老实说,也许您根本不需要使用 XQuery。

如果您需要将中等复杂的 XML 文档从 XML 转换为 HTML,我建议使用 XSL。就个人而言,我发现 XSL 比 XQuery 更容易学习。由于 XSL 的存在时间更长,因此在线提供了大量示例和教程。

我们目前使用 XQuery 只是因为它是我们获得许可的专用 XML 软件的一部分。XQuery 是从大型存储库中选择 XML 片段的绝佳工具,但我们仍然使用 XSL 来转换我们的文档。

于 2008-09-20T15:35:50.820 回答
1

在网站开发环境中使用 XQuery 可以有很多场景:

动态生成页面:

您需要一个库来提供可以从服务器端代码调用的 API,如果您的 XML 数据存储在传统数据库或文件系统中,就会出现这种情况。例如:Zorba 为 PHP 提供了这样的 API,还有用于 Java 的 XQuery API 等。

如果您的 XML 数据存储在支持 XQuery 的 XML 数据库服务器中,那么您将向服务器发出 XQuery 查询并取回结果。此类别中有许多开源和商业产品。BaseX 是一个开源示例。

静态生成页面:

您可能希望从 XML 数据静态生成一些 HTML 页面。在这种情况下,您可以运行命令行 XQuery 实用程序,例如 Zorba、Saxon、BaseX 和许多其他提供此类 CLI 工具的公司。或者,您也可以使用 API 从您自己的脚本中执行此操作。

然后,您将在构建系统中定义规则,以便在您的 XML 数据更改时执行这些命令或脚本。

在静态和动态方法中,您都可以设置您的环境,以便 XQuery 与您的模板系统一起使用,例如,您可以基于 XML 生成 HTML 段,然后将它们插入到您的模板系统中,而不是通过 XQuery 生成整个 HTML 页面。模板。

转换以外的用途:

上述案例是关于将 XML 转换为 HTML,但 XQuery 可以在 Web 开发过程中以其他方式使用。我发现它有用的一种方法是修改 XML 文档。假设您有一个较长的 XML 文档,并且您想修改字段值或添加字段或属性 - 您可以使用 XQuery Update Facility 扩展来实现这一点。

希望这可以帮助。我没有讨论你的例子,因为我认为这只是为了澄清。

于 2011-09-02T15:18:35.143 回答
1

请参阅以下链接:

http://beyondrelational.com/blogs/jacob/archive/2009/08/19/xquery-lab-47-generating-html-table-from-xml-data.aspx

于 2011-08-21T09:47:42.540 回答
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:尚未测试/执行它,但这是一种解决方案的样子

于 2008-09-17T13:10:37.210 回答