Marklogic Json Xquery 无法查询

问题描述 投票:0回答:3

我将 twitter 的 JSON 搜索输出加载到 Marklogic 中,使用基本转换器将其转换为 Marklogic 的 JSON XML 格式。

当我尝试使用以下 XQuery 查询 id 时

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
for $r in doc()/json
let $b:=$r/id
return (
$b)

它一直抱怨没有结果。

当我使用 doc() 时,xml 显示正常,但 doc()/json 不显示任何内容。

下面是 Marklogic 从 Twitter 的 JSON 输出生成的 XML 片段

<?xml version="1.0" encoding="UTF-8"?>
<json type="object" xmlns="http://marklogic.com/xdmp/json/basic">
  <contributors type="null"/>
  <truncated type="boolean">false</truncated>
  <text type="string">@angelicism I love this site: http://t.co/XIjckcu0Lk</text>
  <in__reply__to__status__id type="number">369589929183297536</in__reply__to__status__id>
  <id type="number">369595664277065728</id>
  <favorite__count type="number">0</favorite__count>
...
json xquery marklogic
3个回答
3
投票

您尝试选择的元素位于您需要在 XPath 中指定的名称空间中;试试这个:

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
declare namespace json = "http://marklogic.com/xdmp/json/basic";
for $r in doc()/json:json
let $b:=$r/json:id
return (
$b)

1
投票

它可能是命名空间,也可能是二进制节点。有用的调试工具包括

xdmp:describe
fn:namespace-uri

xdmp:describe(
  doc()[1])

namespace-uri(
  doc()[1]/*)

0
投票

您遇到的问题似乎是由于您尝试访问从 Twitter 的 JSON 输出生成的 XML 结构中的元素的方式所致。

MarkLogic 将 JSON 视为一流的数据类型,但是当您将 JSON 转换为 XML 时,访问数据需要了解 XML 层次结构和命名空间。

鉴于您提供的 XML 代码段使用命名空间“http://marklogic.com/xdmp/json/basic”作为转换后的 JSON,您需要在 XQuery 中正确引用此命名空间才能正确访问元素。

xquery version "1.0-ml";

declare namespace json = "http://marklogic.com/xdmp/json/basic";

for $doc in doc()//json:json
let $id := $doc/json:id
return $id

使用命名空间中的 XML 元素时,必须在 XQuery 中声明并使用适当的命名空间前缀。在这种情况下,由于从 JSON 转换的 XML 使用特定的命名空间,因此您的 XQuery 必须确认此命名空间才能成功查询其中的元素。

© www.soinside.com 2019 - 2024. All rights reserved.