ms excel兼容csv文件,表示MarkLogic目录中的所有文档
如何最好地使用ms excel兼容csv文件,表示MarkLogic目录中的所有文档,marklogic,Marklogic,如何最好地使用XCCJava客户端和Tomcat和MarkLogic使MS-Excel兼容csv文件,该文件表示MarkLogic目录中的所有文档都位于远程位置。目录中的文档数量约为15000个。第一部分,获取目录中的所有文档,已准备就绪,可以从 正如我在那里的回答中所指出的,如果您需要进一步的限制,您可以使用其他cts:query术语cts:query查询cts:directory query 接下来,您需要将每个XML文档转换为CSV。这相当简单,但是您必须知道XML是如何构造的,或者有一些
XCC
Java客户端和Tomcat
和MarkLogic
使MS-Excel
兼容csv
文件,该文件表示MarkLogic目录中的所有文档都位于远程位置。目录中的文档数量约为15000个。第一部分,获取目录中的所有文档,已准备就绪,可以从
正如我在那里的回答中所指出的,如果您需要进一步的限制,您可以使用其他cts:query
术语cts:query
查询cts:directory query
接下来,您需要将每个XML文档转换为CSV。这相当简单,但是您必须知道XML是如何构造的,或者有一些方法来推断它。对于这个例子,我会说我总是在一些根元素下有简单的子元素a
,b
,c
,d
。因此,查询需要为这些元素生成一个CSV头,后面是CSV行
我们可能还想从调用者那里提交目录URI。如果您使用REST,那么将使用xdmp:get请求字段
,但对于XCC,它是一个外部值
declare variable $DIRECTORY-URI as xs:string external ;
declare function local:csv($root as element()) as xs:string
{
string-join(($root/a, $root/b, $root/c, $root/d), ',')
};
'A,B,C,D',
cts:search(
collection(),
cts:directory-query($DIRECTORY-URI, 'infinity'))/local:csv(*)
同样,使local:csv
适用于您的应用程序需要一些XML知识或推断其结构的方法。您可能还需要将一些值放在双引号中。但这种基本结构是解决这个问题的最有效方法之一。我避免了任何XQuery FLWOR表达式,因此结果可以流式传输
另一种方法是使用范围索引和cts:query
来限制结果,然后将JSON转换为CSV。这将更加有效,因为不会提取片段。但是,对于某些XML结构来说,这将无法很好地工作,而且您可能无法为每个CSV字段创建范围索引
declare variable $DIRECTORY-URI as xs:string external ;
declare function local:csv($ja as json:array) as xs:string
{
string-join(json:array-values($ja), ',')
};
'A,B,C,D',
local:csv(
cts:value-tuples(
(cts:element-reference(xs:QName('a')),
cts:element-reference(xs:QName('b')),
cts:element-reference(xs:QName('c')),
cts:element-reference(xs:QName('d'))),
(),
cts:directory-query($DIRECTORY-URI, 'infinity')))
这听起来像是“你能帮我做我的工作吗?”之类的问题。@EricBloch我完全同意。请按照我在这个链接上的原始问题:。。。。谢谢
declare variable $DIRECTORY-URI as xs:string external ;
declare function local:csv($ja as json:array) as xs:string
{
string-join(json:array-values($ja), ',')
};
'A,B,C,D',
local:csv(
cts:value-tuples(
(cts:element-reference(xs:QName('a')),
cts:element-reference(xs:QName('b')),
cts:element-reference(xs:QName('c')),
cts:element-reference(xs:QName('d'))),
(),
cts:directory-query($DIRECTORY-URI, 'infinity')))