Marklogic xquery未在html中计算

Marklogic xquery未在html中计算,marklogic,Marklogic,我在c:\dev目录中有一个示例xquery文件,但它不在html页面中计算。它返回白色的空白屏幕 我设置了http服务器和index.xqy ---Setup http server in Marklogic Admin Gui: server name: learnMarkLogic root:c:\dev port:8030 module: (file system) database: shakespeare ---inde

我在c:\dev目录中有一个示例xquery文件,但它不在html页面中计算。它返回白色的空白屏幕

我设置了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_和_c.xml不存在或不包含任何PLAY/TITLE元素

尝试在qconsole端口8000中运行准确的代码以进行验证

其他可能性:

如果这不是打字错误:

---index.qry-----
将扩展名更改为通常与XQuery.xqy或.XQuery共同响应的扩展名,并在应用服务器中设置索引页

还显式地将索引页设置为“index.xqy”

如果仍然不成功,请提供您正在使用的确切URL、您正在接收的HTML页面的视图源,或者最好提供curl或其他简单获取HTTP响应的方法的结果

“blank”或“white”的各种类型可能很难诊断,因此尝试输入HTML注释-它们将显示为空白,但当您查看源代码或卷曲时,您可以看到比“white”更多的内容 在您的情况下-如果存在空的嵌套“b”元素vs none,则会告诉您的for表达式是否在PLAY/TITLE元素的内容为空的情况下找到任何匹配项

此外,如前所述,如果存在匹配项,您将获得一个使用不当的HTML元素“TITLE”

所以不是

{ $p/PLAY/TITLE} 
使用

前者,如果匹配,将产生

<TITLE>the title string<TITLE>
你的for循环不太可能实现你想要的,我怀疑你想要循环所有的PLAY/TITLE元素。您的代码在所有文件name/shakespeare/plays/a_和_c.xml上循环,其中最多有1个文件

您仍将获得所有标题元素,但没有正确嵌套

试一试


除了DALDEI提到的内容之外:在文本XML中嵌入了XPath表达式,并带有默认名称空间。这对XPath使用的默认名称空间也有副作用,导致无法插入游戏标题

最快的解决方法是使用{$x/*:PLAY/*:TITLE}

或者,您可以为数据声明一个显式名称空间,但我怀疑您的数据不在名称空间中,这使得这有点棘手

另一种选择是构造要在文本XHTML之外插入的XML,但返回时必须使用元素构造函数。。太多返回元素{..}{..}

您还可以为XHTML提供一个带前缀的名称空间,但必须将该前缀应用于每个文本XML标记,这可能会很麻烦。而且输出也会有前缀,这不会造成任何伤害,但会消耗不必要的字节


xquery版本1.0-ml {fn:doc/shakespeare/plays/a_and_c.xml/PLAY/TITLE return{$x/string}}

@HTH我错过了最明显的错误!显式构造函数中的默认名称空间。我很少做到这一点,所以在处理任何名称空间xml时,我倾向于在所有事情上都使用名称空间前缀。通常是单个字符,如etc。。。
<TITLE>the title string<TITLE>
  the title string
   for $p in doc("/shakespeare/plays/a_and_c.xml")/PLAY/TITLE
   return <b>{$p/string()}</b>