XQuery中如何通过位置从XML变量中选择指定元素?
解决方案
首先修正你的XML语法错误:末尾的<MaterialList>应该改为</MaterialList>,否则XML无法被正常解析。
针对提取值为1111111的Number元素,以下是正确的XPath表达式及对之前错误的分析:
正确的XPath表达式
按值匹配(推荐,不受节点位置变化影响)
如果你的环境支持直接对变量中的XML节点集执行XPath:
$input.VariableInput/MaterialList/Material/Number[text()='1111111']
或者更简洁的递归查找(XPath 2.0+支持):
$input.VariableInput//Number[.='1111111']
若必须按位置取(不推荐,位置变化会失效)
如果要取第二个Material下的Number,正确写法是:
$input.VariableInput/MaterialList/Material[2]/Number
之前表达式的错误分析
第一个表达式
$input.VariableInput/*:MaterialList/*:Material/*[position() = 2]- 你的XML没有声明任何命名空间,
*:前缀完全多余,会导致节点匹配失败; *[position()=2]是取Material下的第二个子元素(即Name),不是Number,逻辑错误。
- 你的XML没有声明任何命名空间,
第二个表达式
doc("$input.VariableInput")/MaterialList/Material/Number[2]doc()函数用于读取文件系统中的XML文件,而VariableInput是内存中的变量,不能用doc()加载;Number[2]表示取单个Material下的第二个Number元素,但每个Material只有一个Number,所以这个写法逻辑错误,应该改为Material[2]/Number。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

