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

如何用XQuery的tokenize函数拆分XML中itemIDs序列生成嵌套结构?

XML结构转换的XQuery修正方案

原始XML文件

<cosmetics>
<cosmetic id="0" itemIDs="1879053261,1879053932,1879054863"/>
<cosmetic id="1" itemIDs="1879176339"/>
<cosmetic id="2" itemIDs="1879115954"/>
<cosmetic id="3" itemIDs="1879051065,1879057689"/>
</cosmetics>

目标转换格式

<cosmetics>
<cosmetic id="0">
    <item id="1879053261"/>
    <item id="1879053932"/>
    <item id="1879054863"/>
</cosmetic>
<cosmetic id="1">
    <item id="1879176339"/>
</cosmetic>
<!-- 其他条目以此类推 -->
</cosmetics>

你的尝试代码

for $newcosmetic in doc("cosmetics.xml")/cosmetics/cosmetic/
return <cosmetic id="{$newcosmetic/@id}">
    for $itemid in $newcosmetic/tokenize(@itemIDs,",") 
    return <itemid id="{$itemid}"/>
</cosmetic>

修正后的XQuery代码

<cosmetics>
{
    for $cosmetic in doc("cosmetics.xml")/cosmetics/cosmetic
    return 
        <cosmetic id="{$cosmetic/@id}">
        {
            for $itemId in tokenize($cosmetic/@itemIDs, ",")
            return <item id="{$itemId}"/>
        }
        </cosmetic>
}
</cosmetics>

问题解析

  1. 缺失根节点包裹:原代码未生成外层<cosmetics>根节点,不符合目标格式的结构要求。
  2. 函数调用语法错误:tokenize是XQuery全局内置函数,不能以$newcosmetic/tokenize(...)的节点方法形式调用,正确写法为tokenize($节点/属性, 分隔符)。
  3. 元素名称错误:原代码生成<itemid>元素,而目标格式要求的是<item>元素,需修正元素名。
  4. 嵌套表达式语法问题:内层循环需要用大括号{}包裹,才能在XML构造逻辑中嵌入动态生成的内容,否则会被识别为静态文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:42:51