Marklogic xquery 未在 html 中评估

Marklogic xquery is not evaluating in html

我在 c:\dev 目录中有一个示例 xquery 文件,但它没有在 html 页面中进行评估。它 returns 白色空白屏幕。

我设置了 http 服务器和 index.xqy

---Setup http server in Marklogic Admin Gui:
      server name: learnMarkLogic
      root:c:\dev
      port:8030
      module: (file system)
      database: shakespeare


---index.qry-----

xquery version "1.0-ml";

xdmp:set-response-content-type("text/html; charset=utf-8"),
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
<html xmlns="http://www.w3.org/1999/xhtml">

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>shakespeare</title>

  </head>

  <body>

      <p>
         {
          for $x in doc("/shakespeare/plays/a_and_c.xml")
          return <b>{$x/PLAY/TITLE}</b>
         }
      </p>

   </body>
</html>

最简单的解释是文档“/shakespeare/plays/a_and_c.xml”不存在或不包含任何PLAY/TITLE个元素。

尝试运行 qconsole(端口 8000)中的确切代码进行验证。

其他可能性:

如果这不是错字:

---index.qry-----

将扩展名更改为定义为与 XQuery 对应的扩展名(通常为 .xqy 或 .xquery),并在应用服务器中设置您的索引页面

同时明确设置索引页为'index.xqy'

如果仍不成功,请提供您正在使用的确切 URL,您收到的 HTML 页面的 "view source"(或者最好是 curl 或其他简单方式的结果获取 HTTP 响应)

'blank' 或 'white' 的变体很难诊断——所以尝试输入 HTML 注释——它们将显示为空白,但当你这样做时 "view source"(或卷曲)你可以看到比 'white' 多得多的东西 -- 在你的情况下 - 空嵌套 'b' 元素与 none 的存在将告诉你的 for 表达式是否找到任何匹配项与 PLAY/TITLE 元素的内容是否为空白。

此外——正如所写——如果有匹配项,您将得到一个使用不当的 HTML 元素 'TITLE'。

所以不用

{ $p/PLAY/TITLE} 

使用

{ $p/PLAY/TITLE/string()} 

前者如果匹配,将产生

<TITLE>the title string<TITLE>

,后来的简单

  the title string

您的 for 循环可能不会执行您想要的操作,我怀疑您想要遍历所有 PLAY/TITLE 元素。您的代码遍历所有文档名称“/shakespeare/plays/a_and_c.xml”,其中最多有 1.

您仍将获得所有 TITLE 元素,但嵌套不正确。

尝试

   for $p in doc("/shakespeare/plays/a_and_c.xml")/PLAY/TITLE
   return <b>{$p/string()}</b>

除了 DALDEI 提到的内容之外:您在文字 XML 中嵌入了带有默认名称空间的 XPath 表达式。在 XPath 使用的默认命名空间上也有一个 side-effect,导致您的播放标题无法插入。

最快的出路是使用<b>{$x/*:PLAY/*:TITLE}</b>

或者,您可以为您的数据声明一个明确的命名空间,但我怀疑您的数据在 no-namespace 中,这有点棘手。

另一种选择是构建要在文字 XHTML 之外插入的 XML,但您也必须为 return <b>.. 使用元素构造函数(return element {..} {..} .

您也可以为您的 XHTML 提供带前缀的名称空间,但您必须将该前缀应用于每个文字 XML 标记,这可能很麻烦。输出也会有这个前缀,这没有坏处,但会消耗不必要的字节。

HTH!