如何用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>
问题解析
- 缺失根节点包裹:原代码未生成外层
<cosmetics>根节点,不符合目标格式的结构要求。 - 函数调用语法错误:
tokenize是XQuery全局内置函数,不能以$newcosmetic/tokenize(...)的节点方法形式调用,正确写法为tokenize($节点/属性, 分隔符)。 - 元素名称错误:原代码生成
<itemid>元素,而目标格式要求的是<item>元素,需修正元素名。 - 嵌套表达式语法问题:内层循环需要用大括号
{}包裹,才能在XML构造逻辑中嵌入动态生成的内容,否则会被识别为静态文本。
内容的提问来源于stack exchange,提问作者Hans Messersmith
相关产品推荐
相关产品推荐

