此问题与this one类似,但不同。
我有以下xmls:
doc1.xml
<Companies>
<Company id="63919" isSubject="N" refType="SEC">
<IsRestricted value="true"/>
<Name>Caixa</Name>
</Company>
<Company id="13332" isSubject="Y" refType="PRI">
<Name>Banco</Name>
</Company>
</Companies>
doc2.xml
<Companies>
<Company id="13336" isSubject="N" refType="SEC">
<IsRestricted value="false"/>
<Name>Santander</Name>
</Company>
<Company id="117436" isSubject="N" refType="PRI">
<Name>Bankia</Name>
</Company>
</Companies>
doc3.xml
<Companies>
<Company id="12236" isSubject="N" refType="SEC">
<Name>Inter</Name>
</Company>
<Company id="134562" isSubject="N" refType="PRI">
<IsRestricted value="true"/>
<Name>Liber</Name>
</Company>
</Companies>
我的搜索需要排除其中refType ='PRI'&amp; isSubject ='Y'&amp; IsRestricted-value ='true'.So,在我的示例中,结果应包含doc1.xml
和doc2.xml
,但不包含doc3.xml
。
我认为以下查询可以完成这项工作:
cts:search(/,
cts:not-query(
cts:element-query(xs:QName("Company"),cts:and-query((
cts:element-attribute-value-query(xs:QName("Company"),xs:QName("refType"),"PRI",(),0),
cts:element-attribute-value-query(xs:QName("Company"),xs:QName("isSubject"),"Y",(),0),
cts:element-attribute-value-query(xs:QName("IsRestricted"),xs:QName("value"),"true",(),0)
)))
)
)
但它只返回doc2.xml
。我已更新查询:
cts:search(/,
cts:not-query(
cts:near-query((
cts:element-attribute-value-query(xs:QName("Company"),xs:QName("refType"),"PRI",(),0),
cts:element-attribute-value-query(xs:QName("Company"),xs:QName("isSubject"),"Y",(),0),
cts:element-attribute-value-query(xs:QName("IsRestricted"),xs:QName("value"),"true",(),0)
)))
)
似乎也不起作用。仅返回doc2.xml
。
答案 0 :(得分:0)
cts:search(fn:collection("companies"),
cts:not-query(
cts:and-query((
cts:element-attribute-value-query(xs:QName("Company"),
xs:QName("refType"), "PRI"),
cts:element-attribute-value-
query(xs:QName("Company"),xs:QName("isSubject"),"Y"),
cts:element-attribute-value-
query(xs:QName("IsRestricted"),xs:QName("value"),"true")))))
这将为您提供所需的结果。