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

使用XQUERY转换XML到CSV时生成空文件的问题排查

XML转CSV空文件问题排查与解决

问题背景

源XML内容

<?xml version="1.0"?>
<Price-Data-Description xmlns:xsi="http://www.ybd3.org/2021/XMLSchema-instance">
  <item id="Data_200_PRICE">
    <Code>111</Code>
    <Cur>12</Cur>
    <Conv>600</Conv>
    <Data>Float</Data>
    <Year>1202</Year>
    <Key>Data100-1202</Key>
  </item>
  <item id="Data_100_PRICE">
    <Code>100</Code>
    <Cur>199</Cur>
    <Conv>900</Conv>
    <Data>Integer</Data>
    <Year>1302</Year>
    <Key>Data200-1202</Key>
  </item>
</Price-Data-Description>

期望输出CSV

Code,Cur,Conv,Data,Year
111,12,600,Float,1202
100,199,900,Integer,1302

原XQuery脚本(生成空文件)

<SerializeToDelimitedContentTask>
   <filePath></filePath>
   <fileName>MyFile.csv</fileName>
    <skipHeaders>false</skipHeaders>
    { for $i in $input.fileEvent[1]/content//*:item
return
    <customObjects>
    <Code>{$i/Code/text()}</Code>
    <Cur>{$i/Cur/text()}</Cur>
    <Conv>{$i/Conv/text()}</Conv>
    <Data>{$i/Data/text()}</Data>
    <Year>{$i/Year/text()}</Year> 
    </customObjects>}
   <header>
      <fieldIndex>1</fieldIndex>
      <name>Code</name>
   </header>
   <header>
      <fieldIndex>2</fieldIndex>
      <name>Cur</name>
   </header>
   <header>
      <fieldIndex>3</fieldIndex>
      <name>Conv</name>
   </header>
   <header>
      <fieldIndex>4</fieldIndex>
      <name>Data</name>
   </header>
   <header>
      <fieldIndex>5</fieldIndex>
      <name>Year</name>
   </header>
</SerializeToDelimitedContentTask>

问题排查

  1. 节点结构错误:原脚本循环生成多个<customObjects>节点,但SerializeToDelimitedContentTask要求单个<customObjects>容器,内部用<customObject>节点承载每行数据。
  2. 路径匹配问题://*:item尝试匹配带命名空间的<item>节点,但源XML中<item>属于无命名空间元素,应该用//item直接匹配;同时需确保$input.fileEvent[1]/content正确指向XML内容根节点。

修正后的XQuery脚本

<SerializeToDelimitedContentTask>
  <filePath></filePath>
  <fileName>MyFile.csv</fileName>
  <skipHeaders>false</skipHeaders>
  <customObjects>
    {
      for $i in $input.fileEvent[1]/content//item
      return
        <customObject>
          <Code>{$i/Code/text()}</Code>
          <Cur>{$i/Cur/text()}</Cur>
          <Conv>{$i/Conv/text()}</Conv>
          <Data>{$i/Data/text()}</Data>
          <Year>{$i/Year/text()}</Year>
        </customObject>
    }
  </customObjects>
  <header>
    <fieldIndex>1</fieldIndex>
    <name>Code</name>
  </header>
  <header>
    <fieldIndex>2</fieldIndex>
    <name>Cur</name>
  </header>
  <header>
    <fieldIndex>3</fieldIndex>
    <name>Conv</name>
  </header>
  <header>
    <fieldIndex>4</fieldIndex>
    <name>Data</name>
  </header>
  <header>
    <fieldIndex>5</fieldIndex>
    <name>Year</name>
  </header>
</SerializeToDelimitedContentTask>

验证结果

修正后的脚本会正确遍历源XML中的所有<item>节点,生成符合预期的CSV文件,内容与需求完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:27:16