XQuery-使用模式选择和显示子节点

时间:2018-10-03 07:55:19

标签: xpath xquery

我从SoapUI启动了测试,我想找出一个XQuery断言。我无法编写XQuery请求。

我的xml文件(回答请求SoapUI)

<parent>
  <total1>10.000</total1>
  <total2>15</total2>
  <value1>1</value1>
  <value2>2</value2>
</parent>

期望的答案

我只希望以总数开头的节点以及节点值的数字值

<parent>
  <total1>10.0</total1>
  <total2>15.0</total2>
</parent>

当前无法使用的XQuery请求

<parent>
{ for $n in //parent/*[starts-with(name(),'total')]
 return ($n/name() ,$n/number(text()) )
}
</parent>

这不正确,因为它仅显示节点名称。所有节点都在同一行上:<parent> total1 10.0 total2 15.0 </parent> 我可以使用XQuery或XPath做到这一点

1 个答案:

答案 0 :(得分:3)

可以使用element constructors创建新元素节点:

<parent>{
  for $n in //parent/*[starts-with(name(), 'total')]
  return element { name($n) } { number($n) }
}</parent>

函数调用number(<total1>10.000</total1>)产生10而不是10.0。如果您需要自定义的数值表示形式,可以使用format-number函数:

<parent>{
  for $n in //parent/*[starts-with(name(), 'total')]
  return element { name($n) } { format-number(number($n), '#.0') }
}</parent>