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

XQuery新手技术问询:如何将API响应转换为自定义XML格式

用XQuery将API响应转换为自定义XML格式

嘿,作为XQuery新手,别担心,把这种API响应转成你想要的自定义XML其实很简单!我先基于你给出的输入结构,给你一个实用的示例方案,你可以根据自己的实际需求调整。

先明确输入结构(你的API响应)

<root>
  <_1>
    <dataType>
      <name>XVar(Osmo [mOsmol/kg])</name>
      <term>M185</term>
      <type>XVar</type>
    </dataType>
    <values>305</values>
    <values>335</values>
  </_1>
  <_2>
    <dataType>
      <name>XVar(DO (2) [%])</name>
      <term>M199</term>
      <type>XVar</type>
    </dataType>
    <!-- 这里省略更多values节点 -->
  </_2>
</root>

假设你想要的自定义XML格式

我们可以转成更清晰的结构化格式,每个指标单独成节点,值用统一标签包裹:

<CustomMetrics>
  <Metric name="XVar(Osmo [mOsmol/kg])" term="M185" type="XVar">
    <Value>305</Value>
    <Value>335</Value>
  </Metric>
  <Metric name="XVar(DO (2) [%])" term="M199" type="XVar">
    <!-- 对应的值节点 -->
  </Metric>
</CustomMetrics>

实现转换的XQuery代码

xquery version "3.0";

(: 可以用doc()函数读取本地输入文件,或者直接绑定输入XML到$input变量 :)
let $input := doc('your-input-file.xml')/root
return
<CustomMetrics>
  (: 遍历root下所有动态命名的条目节点(_1、_2...) :)
  for $entry in $input/*
  let $data-info := $entry/dataType
  return
  <Metric 
    name="{$data-info/name/text()}"
    term="{$data-info/term/text()}"
    type="{$data-info/type/text()}"
  >
    (: 把每个values节点转换为统一的Value元素 :)
    for $val in $entry/values
    return <Value>{$val/text()}</Value>
  </Metric>
</CustomMetrics>

代码关键部分解释

  • 动态遍历条目:for $entry in $input/* 会自动处理所有像_1、_2这类命名不固定的节点,不用逐个写死节点名。
  • 元数据提取:通过$entry/dataType获取每个条目的类型信息,用XQuery的属性值模板"{$data-info/name/text()}"把文本内容注入到自定义节点的属性中。
  • 值列表转换:嵌套的for $val in $entry/values会把每个<values>节点转换成你想要的<Value>节点,完全保留原始值的顺序和数量。

灵活调整提示

如果你的自定义格式需要修改(比如把属性改成子元素、调整节点名称),只需要修改对应的XML结构部分即可。比如想把name改成子元素,就把<Metric>里的属性替换成<Name>{$data-info/name/text()}</Name>就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:03