JUnit测试XML文档是否在任意列上排序

时间:2010-04-26 19:56:43

标签: xml xpath junit xunit xmlunit

给出像

这样的xml文档
<root>
  <row>
    <a>2</a>
    <b>1</b>
    <c>8</c>
  </row>
  <row>
    <b>5</b>
    <a>2</a>
    <c>8</c>
  </row>
  <row>
    <a>2</a>
    <c>8</c>
    <b>6</b>
  </row>
</root>

是否有一种简单的方法来断言XML文档在XMLUnit

中的元素B上排序

编辑:我对一个软件有一个奇怪的问题,我无法改变任何给定节点中XML标签的值需要按特定顺序排列的位置。我想让我的测试工具在任何其他验证之前强制执行这套规则。

3 个答案:

答案 0 :(得分:2)

使用以下简单XPath 1.0表达式的值

<强> not(//b[. > following::b])

答案 1 :(得分:1)

您可以围绕XPath选择构建断言。

可能最简单的方法是使用XPath表达式/root/row/b,请求NODESET结果类型,然后将每个结果节点的文本复制到List结构中。您可以声明该列表中的文本等于使用Arrays.asList()方法创建的“预期”列表(我假设您使用的是Java)。

答案 2 :(得分:1)

如果你可以执行XQuery,那么XQuery断言:

every $i in (1 to count ($x/row) - 1)
satisfies 
   let $j :=  $i + 1   
   return number($x/row[$i]/b) <= number($x/row[$j]/b)

其中$ x是文档,如果行按b的升序排列,则为true,否则为