You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用迭代XQuery转换CSV为XML时遇零长度字符串错误求助

解决XQuery处理CSV转XML时的“Supplied element name is a zero-length string”错误

问题原因

报错核心是生成XML元素时使用了空字符串作为元素名。结合你的场景,生产环境的CSV表头大概率存在以下异常:

  • 表头开头/结尾有多余逗号,分割出空字段名
  • 表头包含连续逗号,产生空字段名
  • 部分字段名本身为空字符串

测试环境的CSV无此类情况,因此运行正常,但生产环境的数千行数据包含上述异常格式,触发了错误。

修复后的XQuery代码

let $lines := tokenize(/result/text(), '
')
let $raw_fieldnames := tokenize($lines[1], '\s*,\s*')
-- 为空字段生成带序号的默认名称,避免空元素名
let $fieldnames := 
  for $fn at $pos in $raw_fieldnames
  return if (normalize-space($fn) eq '') then concat('field_', $pos) else $fn
return
<results>
{
  for $line at $i in $lines
  where $i gt 1 and normalize-space($line) ne '' -- 跳过空行,减少无效处理
  let $fields := tokenize($line, '\s*,\s*')
  return
  <row>{
    for $fieldname at $j in $fieldnames
    -- 兼容行字段数与表头不匹配的情况:字段不足时填空字符串
    let $value := if ($j le count($fields)) then fn:replace($fields[$j],'&quot;','') else ''
    return
     element {fn:replace($fieldname,' ','_')} {$value}
  }</row>
}
</results>

关键修改点

  1. 空字段名处理:对原始表头的空字段名生成field_序号格式的默认名称,彻底避免空元素名出现
  2. 跳过空行:新增判断跳过CSV中的空行,减少无效处理逻辑
  3. 字段数兼容:新增字段数判断,当某行字段数量少于表头时,对应位置填空字符串,避免索引越界

内容的提问来源于stack exchange,提问作者Punit Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:36:04