如何在XQuery中使用或实现数组?

XQuery中是否支持数组?举例来说,如果我们想在XQuery来实现 简单的java程序如何,我们将做到这一点:如何在XQuery中使用或实现数组?

(我不要求将整个程序翻译成XQuery的,但只是要求 如何实现行号数组下面的2个代码到xquery中?我是 也是使用marklogic/xdmp函数)。

java.lang.String test = new String("Hello XQuery"); 

char[] characters = test.toCharArray();

for(int i = 0; i<characters.length; i++) {

if(character[i] == (char)13) {

character[i] = (char) 0x00;

}

}

Legend:

hex 0x00 dec 0 : null

hex 0x0d dec 13: carriage return

hex 0x0a dec 10: line feed

hex 0x20 dec 22: dquote

回答:

与样品代码转换为XQuery的问题不是缺乏对阵列的支持,但事实证明,X00不XML一个有效的字符。如果不是因为这个问题,你可以用简单的函数调用快递查询:

translate($input, '&#x13;', '&#x00;') 

现在,你可能会说,欺骗,进而它只是碰巧让有这不正是你想要的功能手工操作。但是如果这个函数不存在,你可以在XQuery中对它进行编程:有足够的字符串可用于字符串,以允许您以任何您想要的方式操纵它们。如果需要(并且很少需要),可以使用函数string-to-codepoints()将字符串转换为整数序列,然后利用所有的XQuery工具来操作序列。

的教训是,当你使用说明性语言像XQueryXSLT,不要试图用你被迫在使用更原始语言相同低级别的编程技术。通常有更直接的方式来表达问题。

回答:

有两种方法可以做到这一点。

  • 首先你可以创建一个XmlResults使用 XmlManager.createResults()对象,并使用XmlResults.add()到您的 字符串添加到这一点。然后可以使用XmlResults对象在XmlQueryContext中设置变量的 值,该变量可用于您的 查询。

    实施例:

    XmlResults values = XMLManager.createResults(); 

    values.add(new XmlValue("value1"));

    values.add(new XmlValue("value2"));

    XmlQueryContext.setVariableValue("files", values);

  • 另一种方法是在分开的XQuery的字符串。您可以使用tokenize()函数执行此操作,该函数使用 正则表达式与字符串分隔符匹配。

    http://www.w3.org/TR/xpath-functions/#func-tokenize

感谢。

回答:

XQuery内置了对序列的支持。函数tokenize()(如@ harish.ray所示)返回一个序列。你也可以用大括号和逗号自己构造一个:

let $mysequence = (1, 2, 3, 4) 

序列是有序列表,所以你可以依赖它。这与从XPath返回的节点集稍有不同,那些通常是文档订购的。

在侧面标记上:实际上,XQuery中的所有内容都是节点集或序列。即使函数被声明为返回一个字符串或int,也可以将该返回值视为一个项目的序列。无需显式转换,因为无论如何,XQuery中都没有构造。像fn:exists()fn:empty()这样的功能总能正常工作。

HTH!

回答:

只是为了好玩,这里是我如何在XQuery中执行此操作,如果fn:translate不存在。我认为迈克尔凯的建议最终会看起来类似。

let $test := "Hello XQuery" 

return codepoints-to-string(

for $c in string-to-codepoints($test)

return if ($c eq 32) then 44 else $c)

请注意,由于他指出的问题,我改变了转换:0不是合法的代码点。所以我把空格翻译成了逗号。

使用MarkLogic,另一种选择是使用http://docs.marklogic.com/json:array及其相关功能。功能将允许以模糊的命令式编码。编码这两种变化可能是一个很好的学习练习。

回答:

有点展望:XQuery 3.1将为数组提供原生支持。有关更多详细信息,请参阅http://www.w3.org/TR/xquery-31/。

回答:

您可以构建一个这样的数组:

$myArray = tokenize('a b c d e f g', '\s') 

// $myArray[3] -> c

请注意,这个伪数组的第一个指数是1不是0!

以上是 如何在XQuery中使用或实现数组? 的全部内容, 来源链接: utcz.com/qa/263534.html

回到顶部