首页 > 解决方案 > 使用 CSV 序列化包装时未声明的变量

问题描述

我有一个在 Basex 9.5.1 中通过ftp://ftp.ncbi.nlm.nih.gov//biosample/biosample_set.xml.gz运行的查询

for $bsattrib in doc(
  'biosample_set'
)/BioSampleSet/BioSample/Attributes/Attribute

let $attribdata := data(
  $bsattrib
)
let $attrib_name := data(
  $bsattrib/@attribute_name
)
let $attrib_hn := data(
  $bsattrib/@harmonized_name
)
let $bs := $bsattrib/../..
let $bsaccession := data(
  $bs/@accession
)

group by $attrib_hn

order by  count(
  $bs
) descending

return <record>
<hname>{$attrib_hn}</hname>
<bs_count>{count($bs)}</bs_count>
</record>

给予

<record>
  <hname/>
  <bs_count>59840</bs_count>
</record>
<record>
  <hname>gap_accession</hname>
  <bs_count>39179</bs_count>
</record>
<record>
  <hname>submitter_handle</hname>
  <bs_count>39179</bs_count>
</record>

等等

当我用

declare option output:method "csv";
declare option output:csv "header=yes, separator=semicolon";

<csv>

在顶部和

</csv>

在底部,我得到

未声明的变量:$attrib

标签: xmlxquerybasex

解决方案


呃,我把<csv>标签放错地方了

return <csv><record>
<hname>{$attrib_hn}</hname>
<bs_count>{count($bs)}</bs_count>
</record></csv>

推荐阅读