我有以下检查
<iso:pattern id="myChecks">
<iso:rule context="/root/outerElement/innerElement">
<iso:assert test="typeElement[@someAttribute='type1']">
No typeElement with someAttribute=type1 found
</iso:assert>
<iso:assert test=".[child::typeElement[@someAttribute='value1']]/data">
No dataElement found in an innerElement with typeElement with someAttribute=type1
</iso:assert>
<iso:assert test="count(typeElement[@someAttribute='type1'] > 1)">
There is more than 1 innerElement with typeElement 1 with someAttribute=type1
</iso:assert>
</iso:rule>
</iso:pattern>
并且文档看起来像这样:
<outerElement>
<!-- 1 of the dataElements is mandatory -->
<!-- and i need exact one innerElement which has a typeElement with someAttribute=type1 -->
<innerElement>
<dataElement>data</dataElement>
<dataElement>data</dataElement>
<typeElement someAttribute="type1"></typeElement>
</innerElement>
<!-- This is not allowed and check 3 should find this -->
<innerElement>
<dataElement>data</dataElement>
<dataElement>data</dataElement>
<typeElement someAttribute="type1"></typeElement>
</innerElement>
<!-- This one is valid because type2 has other restrictions -->
<innerElement>
<typeElement someAttribute="type2"></typeElement>
</innerElement>
</outerElement>
问题现在是检查1和2使每个innerElement检查它并产生错误,这意味着如果我有3次类型2我从前3次检查得到3个错误。我想要的是确保只有一个innerElement具有type1并确保它具有至少1个dataElement,而具有type2的innerElements不被强制为具有dataElement。
第三项检查完全没有用,似乎每次有多个innerElement时它都会抛出错误。
有人可以帮帮我吗?
答案 0 :(得分:1)
好的问题是每个innerElement都是他自己的上下文,因此是单独处理的。 解决方法是从上下文中删除innerElement并将其放入assert字段中。