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, "|"), "&#10;")

...及其输出:

France|UK