cts搜索以测试元素是否不可用

时间:2017-04-06 11:39:38

标签: xquery marklogic cts

下面是我想获取元素co:isbn不可用的条目的XML结构: -

<tr:trackingRecord xmlns:tr="https://www.mla.org/Schema/Tracking/tr"
    xmlns:co="https://www.mla.org/Schema/commonModule/co"
    xmlns:r="http://www.rsuitecms.com/rsuite/ns/metadata">
    <tr:journal>
        <tr:trackingDetails>
            <tr:entry>
                <co:trackingEntryID>2015323313</co:trackingEntryID>
                <co:publicationDate>2015</co:publicationDate>
                <co:volume>21</co:volume>
            </tr:entry>
            <tr:entry>
                <co:trackingEntryID>2015323314</co:trackingEntryID>
                <co:publicationDate>2015</co:publicationDate>
                <co:isbn>
                    <co:entry>NA</co:entry>
                    <co:value>1234567890128</co:value>
                </co:isbn>
            </tr:entry>
            <tr:entry>
                <co:trackingEntryID>2015323315</co:trackingEntryID>
                <co:publicationDate>2015</co:publicationDate>
                <co:volume>21</co:volume>
                <co:isbn></co:isbn>
            </tr:entry>
            <tr:entry>
                <co:trackingEntryID>2015323316</co:trackingEntryID>
                <co:publicationDate>2015</co:publicationDate>
                <co:volume>21</co:volume>
            </tr:entry>
        </tr:trackingDetails>
    </tr:journal>
</tr:trackingRecord>

请建议使用cts:查询相同的内容。

1 个答案:

答案 0 :(得分:0)

如果您可以编辑xml结构,请在entry元素中添加一个属性,例如

<tr:entry isbnPresent="yes"> for isbn present,
<tr:entry isbnPresent="no"> for isbn absent

并基于这些字段的火搜索,

cts:element-attribute-value

就可以了。

OR

没有编辑架构,请尝试,,

for $i in cts:search(//tr:entry,"2015")
return if(fn:exists($i//co:isbn)) then () else $i