XQuery "flattening" 一个元素
XQuery "flattening" an element
我正在从 XML 文件中提取数据,我需要提取一个带分隔符的子元素列表。我有以下内容:
for $record in //record
let $person := $record/person/names
return concat($record/@uid/string()
,",", $record/@category/string()
,",", $person/first_name
,",", $person/last_name
,",", $record/details/citizenships
," ")
元素 "citizenships" 包含名为 "citizenship" 的子元素,在查询中,它将所有子元素粘在一个字符串中,例如"UKFrance"。我需要将它们放在一个字符串中但将它们分开,例如"UK|France".
在此先感谢您的帮助!
fn:string-join($arg1 as xs:string*, $arg2 as xs:string) 就是您要找的。
在您当前所需的用法中,它看起来类似于以下内容:
fn:string-join($record/details/citizenships/citizenship, "|")
在您的文档之外进行测试,使用:
fn:string-join(("UK", "France"), "|")
...returns:
UK|France
值得注意的是,("UK", "France")
是一个字符串序列,就像返回多个 citizenship
的查询同样是一个序列(将评估其中的条目的 string value当传递给 fn:string-join()
时,它的第一个参数被输入为字符串序列)。
考虑以下(简化的)查询:
declare context item := document { <root>
<record uid="1">
<person>
<citizenships>
<citizenship>France</citizenship>
<citizenship>UK</citizenship>
</citizenships>
</person>
</record>
</root> };
for $record in //record
return concat(fn:string-join($record//citizenship, "|"), " ")
...及其输出:
France|UK
我正在从 XML 文件中提取数据,我需要提取一个带分隔符的子元素列表。我有以下内容:
for $record in //record
let $person := $record/person/names
return concat($record/@uid/string()
,",", $record/@category/string()
,",", $person/first_name
,",", $person/last_name
,",", $record/details/citizenships
," ")
元素 "citizenships" 包含名为 "citizenship" 的子元素,在查询中,它将所有子元素粘在一个字符串中,例如"UKFrance"。我需要将它们放在一个字符串中但将它们分开,例如"UK|France".
在此先感谢您的帮助!
fn:string-join($arg1 as xs:string*, $arg2 as xs:string) 就是您要找的。
在您当前所需的用法中,它看起来类似于以下内容:
fn:string-join($record/details/citizenships/citizenship, "|")
在您的文档之外进行测试,使用:
fn:string-join(("UK", "France"), "|")
...returns:
UK|France
值得注意的是,("UK", "France")
是一个字符串序列,就像返回多个 citizenship
的查询同样是一个序列(将评估其中的条目的 string value当传递给 fn:string-join()
时,它的第一个参数被输入为字符串序列)。
考虑以下(简化的)查询:
declare context item := document { <root>
<record uid="1">
<person>
<citizenships>
<citizenship>France</citizenship>
<citizenship>UK</citizenship>
</citizenships>
</person>
</record>
</root> };
for $record in //record
return concat(fn:string-join($record//citizenship, "|"), " ")
...及其输出:
France|UK