Marklogic查询基于元素的值和同一元素的多个属性

时间:2017-05-18 09:40:47

标签: marklogic

此问题与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.xmldoc2.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

1 个答案:

答案 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")))))  

这将为您提供所需的结果。