如何使用XQuery基于两个XML生成动态元素与对应值?
用XQuery实现基于两个XML片段生成动态元素及对应值
你需要将两组XML数据映射生成目标元素:第一组<td>的文本转小写作为新元素名,第二组的元素值按位置对应填充。
实现代码
根据输入XML的结构,提供两种场景的实现方式:
场景1:输入XML有根节点
假设输入XML整理为以下结构:
<source> <element-names> <td>USERID</td> <td>NAME</td> <td>RATING</td> </element-names> <values> <id>1</id> <name>Tom</name> <grade>A</grade> </values> </source>
对应的XQuery代码:
for $name at $pos in /source/element-names/td, $value at $pos in /source/values/* return element {lower-case($name/text())} {$value/text()}
场景2:输入为零散元素(直接绑定变量)
如果输入是无结构的零散元素,可直接将两组元素绑定到变量处理:
let $element-names := (<td>USERID</td>, <td>NAME</td>, <td>RATING</td>), $values := (<id>1</id>, <name>Tom</name>, <grade>A</grade>) for $name at $pos in $element-names, $value at $pos in $values return element {lower-case($name/text())} {$value/text()}
代码说明
- 用
at $pos关键字同步遍历两组元素,确保位置一一对应; - 通过
lower-case()函数将<td>文本转为小写,作为新元素的名称; - 动态生成元素,把对应位置的数据元素文本作为新元素内容。
执行结果
运行上述代码后,将得到期望的输出:
<userid>1</userid> <name>Tom</name> <rating>A</rating>
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

