xQuery simple si ce n'est pas vide conditionnel
J'essaie d'apprendre à xQuery venant de php en arrière-plan, j'ai cette expression fonctionne comme prévu
<![CDATA[
declare variable $doc as node() external;
declare variable $id external;
let $cont := data($doc//div[@class="cont"])
let $title := data($doc//p[@class="vtitle"])
let $text := data($doc//div[@class="venue-cont-left"])
return
<venue id="{$id}">
<title>{$title}</title>
<text>{$text}</text>
</venue>
]]>
Mais maintenant, je veux simplement faire une vérification de la météo $titre est vide ou n'est pas
<![CDATA[
declare variable $doc as node() external;
declare variable $id external;
if(empty(data($doc//p[@class="vtitle"]))) then
(
let $id :=$id
return
<venue id="{$id}" />
) else (
let $cont := data($doc//div[@class="cont"])
let $title := data($doc//p[@class="vtitle"])
let $text := data($doc//div[@class="venue-cont-left"])
return
<venue id="{$id}">
<title>{$title}</title>
<text>{$text}</text>
</venue>
)
]]>
Cela ne fonctionne pas parce que je obtenir ce résultat
<venue id="4">
<title/>
<text>
PHONE:
ADDRESS:....
Comme vous le voyez, le lieu 4 n'a pas de titre donc, il doit avoir été retourné comme <venue id="4" />
Merci pour toute aide!
OriginalL'auteur Moak | 2010-12-15
Vous devez vous connecter pour publier un commentaire.
Il y a un seul scénario que je peux penser de l'endroit où votre requête échoue: Si votre XML contient un
p
nœud comme ça avec aucun contenu:Avec cela, l'extrait de code suivant renvoie une chaîne de longueur nulle
""
(pas une séquence vide):Le problème ici est que la fonction
empty()
vérifie une séquence vide. Par conséquent,empty("")
retournefalse
.Si vous voulez retirer le
empty()
et de basculer de l'époque et d'autre des expressions de votre code devrait fonctionner, car alors la Valeur Booléenne Effective (EBV) est traité. Et, l'EBV d'une chaîne vide ainsi que d'une séquence vide estfalse
.L'espoir qui fait sens?
OriginalL'auteur Dennis Knochenwefel
Utilisation:
Note: séquence Vide effective valeur booléenne est faux.
OriginalL'auteur