我有以下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”,除非该特定数据中的Discount元素元素为“ 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来检查所有数据元素的模式,但是我真的不知道该怎么做。
答案 0 :(得分:0)
如果我对您的理解正确,那么您要强制执行的条件是在给定请求中,要么是
resource/regime eq 'free'
或user/contract/data
元素,要么
priceInPercents
非零,或discount eq 'true'
处理此问题的一种方法是反转第二个主要析取项的布尔极性,并说“ data
和priceInPercents eq '0' and discount eq 'false'
都没有<assert test="./resource/regime eq 'free'
or not(./user/contract
/data[discount eq 'false' and priceInPercents eq 0])"/>
元素。您可以这样说:
every ... satisfies ...
如果使用通用量化表达式,可能会更容易理解;它们采用<assert test="./resource/regime = 'free'
or every $d in ./user/contract/data
satisfies
($d/discount eq 'true'
or $d/priceInPercents ne 0)"/>
的形式。在这种情况下,一种可能的说法是:
function changer(){
$("#car_brand").change(function(){
document.getElementById("car_model").value = "ALL";
this.form.submit()
});}