html - 我不知道如何在带有 eXist 数据库的 html 文件中使用 xqueries

标签 html xml database xquery exist-db

这可能很简单,但我不知道该怎么做。我有这些东西:

  • 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/

相关文章:

java - java中SAX解析器的问题

Java sql更新数据库中的行

database - Access 字段中的随机字符被更改

css - 在 li 内删除 Canvas 下方的空间

javascript - html 是否在同一个对象上使用相同的 id

javascript - 创建表格单元格值数组 jQuery

iphone - WSDL/XML 解析 iOS objective-c

javascript - 在不使用大量 javascript 的情况下很好地分解成一个额外的 div?

c# - 从 id 属性获取 xml 节点值 C#

iphone - 如何在 coredata 上下文中使用预填充的数据库