这可能很简单,但我不知道该怎么做。我有这些东西:
- HTML 文件
- 一个 eXist DB,其集合仅包含一个带有名称的 XML 文件
- 还有一个非常基本的 xquery 文件,其中包含命令
count(//name)
当然,当我在 eXist 客户端中执行 xqy 文件时,它运行良好,但我想做的只是在 HTML 文件中打印:
Names in the file : 49 // 49 is the result of the count(//name)
我应该做什么?
最佳答案
传统上,在 eXist-db (*) 中,XQuery 不会嵌入到您的 .html 文件中。 XQuery 文件本身会组装结果并将其序列化到浏览器。所以你可能有一个像这样的 .xqy 文件(通过 http://yourserver.com:8080/exist/apps/myapp/get-names.xqy 调用):
xquery version "1.0";
declare option exist:serialize "method=xhtml media-type=text/html";
let $count := count(//name)
return
<html>
<head/>
<body>
<div><p>There are {$count} names in the database</p></div>
</body>
</html>
如果您想要将静态 HTML 片段放入此文件中(例如 header ),只需将它们嵌入到 XQuery 中或使用 doc() 函数调用它们并插入它们,就像我在上面使用 $count 所做的那样:
let $header := doc('/db/myapp/header.html')
您还可以扩展此模式并开发自己的模板模块,将应用程序的内容输入到模板中,即 template:assemble-page($title, $content) 将返回一个完整的 HTML 页面,其中 $title head/title 和 body/h1 中,以及正文中的内容 - 以及函数中指定的静态页眉、页脚等。
(*) 从 eXist-db 2.0(当前作为候选版本提供)开始,有一个新的模板框架,可让您在 HTML 模板内嵌入函数调用。这意味着 XQuery 和 HTML 的混合/嵌套更少,并且关注点更清晰地分离。要了解更多信息,请阅读这篇文章,Getting Started with Web Application Development in eXist-db 。它确实非常优雅,我想您可能会发现这比我上面描述的方法更好。在此框架中,您将按原样保留 .html 文件并按以下方式引用 count(//name) 例程:
<p>There are <span class="app:count-names"/> names in the database</p>
框架将 span/@class 视为对您已注册的模块中的函数 count-names() 的引用,例如/db/apps/myapp/modules/app.xql。因此,假设您已经创建了该模块和函数 app:count-names(),那么当您调用 get-names.html 页面时,数据库会动态地将上面的元素转换为 app:count-names() 的结果,例如,42。
我希望这会有所帮助。
关于html - 我不知道如何在带有 eXist 数据库的 html 文件中使用 xqueries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892273/