XML 中的 Xquery 获取元素仅获得一个响应
Obtain only one response from Xquery fetching elements in XML
我想在响应 XML 中查找特定节点,并且 return 是真还是假,取决于它是否匹配条件。我该怎么做才能只收到一个唯一的节点响应,而不是 XML 包含的元素那么多?
这是我的 Xquery 代码:
for $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
return
if ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
$recordRetrieved/ns0:DAT <= $dat)
then <ns2:func>{ true() }</ns2:func>
else <ns2:func>{ false() }</ns2:func
使用此代码,如果 XML 包含 3 个元素 $sA_ADS_VerifOutput1/ns0:recordRetrieved
,响应将是(例如):
<ns2:func>false</ns2:func>
<ns2:func>false</ns2:func>
<ns2:func>true</ns2:func>
我不想要这个,但如果全部都是假的,我希望 <ns2:func>false</ns2:func>
如果至少有一个是真的我希望 <ns2:func>true</ns2:func>
,只有一次。
我考虑过使用where
子句,但如果没有元素满足条件,我需要emerge false。
谢谢。
您可以使用 fn:distinct-values() 来消除重复项,然后将它们包装在需要的元素中。
fn:distinct-values(
for $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
return
if ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
$recordRetrieved/ns0:DAT <= $dat)
then true()
else false()
) ! <ns2:func>{.}</ns2:func>
你想要:
some $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
satisfies ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
$recordRetrieved/ns0:DAT <= $dat)
或更简单地说
exists($sA_ADS_VerifOutput1/ns0:recordRetrieved[
ns0:COD_NRBE_EN = $ent and ns0:DAT <= $dat])
我想在响应 XML 中查找特定节点,并且 return 是真还是假,取决于它是否匹配条件。我该怎么做才能只收到一个唯一的节点响应,而不是 XML 包含的元素那么多?
这是我的 Xquery 代码:
for $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
return
if ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
$recordRetrieved/ns0:DAT <= $dat)
then <ns2:func>{ true() }</ns2:func>
else <ns2:func>{ false() }</ns2:func
使用此代码,如果 XML 包含 3 个元素 $sA_ADS_VerifOutput1/ns0:recordRetrieved
,响应将是(例如):
<ns2:func>false</ns2:func>
<ns2:func>false</ns2:func>
<ns2:func>true</ns2:func>
我不想要这个,但如果全部都是假的,我希望 <ns2:func>false</ns2:func>
如果至少有一个是真的我希望 <ns2:func>true</ns2:func>
,只有一次。
我考虑过使用where
子句,但如果没有元素满足条件,我需要emerge false。
谢谢。
您可以使用 fn:distinct-values() 来消除重复项,然后将它们包装在需要的元素中。
fn:distinct-values(
for $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
return
if ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
$recordRetrieved/ns0:DAT <= $dat)
then true()
else false()
) ! <ns2:func>{.}</ns2:func>
你想要:
some $recordRetrieved in $sA_ADS_VerifOutput1/ns0:recordRetrieved
satisfies ($recordRetrieved/ns0:COD_NRBE_EN = $ent and
$recordRetrieved/ns0:DAT <= $dat)
或更简单地说
exists($sA_ADS_VerifOutput1/ns0:recordRetrieved[
ns0:COD_NRBE_EN = $ent and ns0:DAT <= $dat])