我在ubuntu 14.04上使用Basex 8.0测试版
我的数据库包含XML文档,其元素如下
20141004 193843 -0400
我可以在BaseX gui中使用以下xquery更新所有带有连接时间戳的消息时间戳节点
声明变量$data := db:open('testdb');(:查找带时间的所有元素并返回$n的父元素:),在$$n//./ time /.返回(如果(存在($n/utc-时间戳))然后()插入节点{fn:concat ( fn:substring($n/date,1,4),"-",fn:子字符串($n/date,5,2),"-",fn:子字符串($n/date,7,2),"T",fn:子字符串($n/time,1,2),":",fn:子字符串( $n /time,3,2),":",fn:子字符串($n/time,5,2),fn:子字符串($n/utc-偏移,1,3),fn:子字符串($n/utc-偏移,4,2)}
我将查询嵌入到basex脚本test_bxs.xqy中,如下所示:
声明变量$data := db:open('testdb');(:查找带时间的所有元素并返回$n的父元素:),在$$n//./ time /.返回(如果(存在($n/utc-时间戳))然后()插入节点{fn:concat ( fn:substring($n/date,1,4),"-",fn:子字符串($n/date,5,2),"-",fn:子字符串($n/date,7,2),"T",fn:子字符串($n/time,1,2),":",fn:子字符串( $n /time,3,2),":",fn:子字符串($n/time,5,2),fn:子字符串($n/utc-偏移,1,3),fn:子字符串($n/utc-偏移,4,2)}
并按以下方式执行:
$ basex -d -c test_bxs.xqy org.basex.query.QueryException:语法:查询at org.basex.core.parse.XMLParser.check(XMLParser.java:313) at org.basex.core.parse.XMLParser.command(XMLParser.java:167) at org.basex.core.parse.XMLParser.parse(XMLParser.java:47) at org.basex.core.parse.CmdParser.parse(CmdParser.java:57) at org.basex.core.parse.CommandParser.parse(CommandParser.java:75) at org.basex.core.parse.CommandParser.parse(CommandParser.java:54) at org.basex.core.CLI.execute(CLI.java:88) at org.basex.core.CLI.execute(CLI.java:77) at org.basex.BaseX.(BaseX.java ):85) at org.basex.BaseX.main(BaseX.java:42) org.basex.core.BaseXException:语法:查询org.basex.core.CLI.execute(CLI.java:93) at org.basex.core.CLI.execute(CLI.java:77) at org.basex.BaseX.(BaseX.java:85) at org.basex.BaseX.main(BaseX.java:42) by: org.basex.query语法:查询org.basex.core.parse.XMLParser.error(XMLParser.java:323) at org.basex.core.parse.XMLParser.check(XMLParser.java:313) at org.basex.core.parse.XMLParser.command(XMLParser.java:167) at org.basex.core.parse.XMLParser.parse(XMLParser.java:47) at org.basex.core.parse.CmdParser.parse(CmdParser.java:57)在org.basex.core.parse.CommandParser.parse(CommandParser.java:75) at org.basex.core.parse.CommandParser.parse(CommandParser.java:54) at org.basex.core.CLI.execute(CLI.java:88) .3更多的语法:查询
如果删除insert语句并插入db:output("."),脚本将从命令行运行良好,但当然不会更新数据库。
声明变量$data := db:open('testdb');(:查找带时间的所有元素并返回$n的父元素:),在$$n//./ time /.返回(如果(存在($n/utc-时间戳))然后(db:output("."))(db:output("."))
由于脚本在GUI中按预期执行,所以当从命令行使用时,我希望得到类似的结果。
如能提供任何帮助,将不胜感激。
提前感谢
发布于 2014-10-16 15:40:43
BaseX命令脚本应该始终有一个以.bxs结尾为文件概述的文件。
您的方法失败的原因是,在XML命令脚本中,您不能使用XML元素,因为脚本语言本身由XML元素组成。但是,看起来您只想执行xquery文件,所以只需将XQuery本身(即没有周围的命令和xquery元素)存储在一个文件中,然后使用
basex test_bxs.xqy假设您覆盖了现有文件。
https://stackoverflow.com/questions/26408085
复制相似问题