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
相关产品推荐
相关产品推荐

