如何在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, '', '�')
现在,你可能会说,欺骗,进而它只是碰巧让有这不正是你想要的功能手工操作。但是如果这个函数不存在,你可以在XQuery
中对它进行编程:有足够的字符串可用于字符串,以允许您以任何您想要的方式操纵它们。如果需要(并且很少需要),可以使用函数string-to-codepoints()
将字符串转换为整数序列,然后利用所有的XQuery
工具来操作序列。
的教训是,当你使用说明性语言像XQuery
或XSLT
,不要试图用你被迫在使用更原始语言相同低级别的编程技术。通常有更直接的方式来表达问题。
回答:
有两种方法可以做到这一点。
首先你可以创建一个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