xquery multi if-else
À l'aide de xPath, je suis l'obtention de données de champ html, ces données peuvent être dans ce format (y compris les parenthèses):
De DONNÉES |||| symboles que j'utilise pour expliquer mon code
(bornPlace, bornDate-DeathDate) |||| (str, A-B) = remarque que str peut également contenir '-'
(bornPlace, bornDate) |||| (str, A)
(bornPlace) |||| (str)
(bornDate-DeathDate) |||| (A-B)
(bornDate) |||| (Un)
Ou complètement vide
Je suis en train de récupérer chaque élément distinct de la variable à l'aide de plusieurs if-else, mais il semble que ça ne marche pas comme multi-ligne de commandes (je pense que oui).
J'ai déjà fait un code qui ne fonctionne pas :-/(il dit attendre de retour, trouvé d'autre si ....)
let $temp1 := data(normalize-space(substring-before(substring-after(//div/div[2]/h2/text(), '('), ')')))
if (contains($temp1,',')) (: (str, A-B) or (str, A) :)
then
let $bornPlace := substring-before($temp1, ',')
let $temp2 := substring-after($temp1, ',')
if (contains($temp2,'-'))
then
let $bornDate := substring-before($temp2, '-')
let $deathDate := substring-after($temp2, '-')
else
let $bornDate := $temp2
let $deathDate := data('')
else if (contains($temp1,'-'))
then (: (s-t-r) or (A-B) :)
let $temp2 := normalize-space(substring-before($temp1, '-'))
if (number($temp2)=$temp2) (: it's a number :)
then
let $bornDate := temp2
let $deathDate := normalize-space(substring-after($temp2, '-'))
let $bornPlace := data('')
else
let $bornPlace := $temp1
let $bornDate := data('')
let $deathDate := data('')
else (: (str) or (A) :)
if (number($temp1)=$temp1) (: it's a number :)
then
let $bornDate := temp1
let $deathDate := data('')
let $bornPlace := data('')
else
let $bornPlace := $temp1
let $bornDate := data('')
let $deathDate := data('')
Aussi si il y a une plus belle façon de le faire, je vais le prendre 😀
Merci d'avance pour votre aide 🙂
OriginalL'auteur Enissay | 2012-07-26
Vous devez vous connecter pour publier un commentaire.
Une clause let n'est pas une expression. Vous avez besoin de changer ce genre de logique
par cette
Bien que dans ce cas particulier, j'ai tendance à écrire:
Ensuite, accepter la réponse, s'il vous plaît.
OriginalL'auteur Michael Kay
Votre
let
clauses sont suivis par des expressions (en commençant parif
), ce qui n'est pas une syntaxe valide - unreturn
manque pour en faire un completFLWOR
expression.Également les variables sont définies en interne étendues, et leur liaison n'atteindra pas les étendues extérieures, ce qui n'est pas très utile.
Si ils facilement obtenir cryptique, ce pourrait être le cas pour les expressions régulières, par exemple
Pour plus de détails, consultez le cahier des charges de les expressions régulières et le correspondant Fonctions XQuery.
Pouvez vous s'il vous plaît appliquer regex sur mon exemple? Je suis désespérée xD
Vous devriez obtenir le résultat souhaité, lorsque vous utilisez les trois
let
clauses que j'ai posté, en remplacement de$input
par$temp1
, et la suppression de toutes de votre code, à l'exception delet $temp1 := ...
. Si cela ne fonctionne pas, veuillez expliquer ce qui va mal.OriginalL'auteur Gunther