2012-08-10 32 views
0

我有以下檢查意外行爲檢查

<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時都會拋出一個錯誤。

有人可以幫助我嗎?

回答

1

好的問題在於,每個innerElement是他自己的上下文,因此獨立處理。 解決方法是從上下文中刪除innerElement並將其放入assert字段。