У меня есть следующий xml:
<request>
<resource>
<regime>payed</regime>
</resource>
<user>
<contract>
<data>
<discount>true</discount>
<priceInPercents>0</priceInPercents>
</data>
<data>
<discount>false</discount>
<priceInPercents>20</priceInPercents>
</data>
<data>
<discount>false</discount>
<priceInPercents>0</priceInPercents>
</data>
</contract>
</user>
</request>
XML следует файлу XSD, в который я хотел бы добавить условие, которое проверяет следующее: если режим «оплачен», то любойpriceInPercents не может иметь значение «0», если только элемент скидки в этом конкретном элементе данных не равен «true».(Возможные значения для режима только «оплачено» или «бесплатно»).Я пытаюсь сделать это, используя assert на уровне запроса следующим образом:
<assert test="./resource/regime/text() = 'free'
or ./user/contract
/data[discount=false]
/priceInPercents != 0
or ./user/contract
/data[priceInPercents = 0]
/discount = true "/>
В этом случае валидатор говорит, что все в порядке, потому что вторая часть условия выполняется во втором случае итретья часть заполнена в первом случае.Третий случай не соответствует ни одному из условий, но это не имеет значения, потому что assert уже нашел совпадение.Мне нужно переписать XPath, чтобы проверить шаблон для всех элементов данных, но я действительно не знаю, как это сделать.