2017-05-18 81 views
0

這個問題像this one但不同。Marklogic查詢基於元素的值和同一元素的多個屬性

我有以下個XML:

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 & isSubject =」 Y」 & IsRestricted值=」 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

回答

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

這會給你想要的結果。

相關問題