Conditionnels imbriqués si else dans xpath
J'ai ce XML:
<property id="1011">
<leasehold>No</leasehold>
<freehold>Yes</freehold>
<propertyTypes>
<propertyType>RESIDENTIAL</propertyType>
</propertyTypes>
</property>
et je veux créer une instruction xpath qui est le même que le suivant imbriquée si-sinon de pseudo-bloc.
if( propertyTypes/propertyType == 'RESIDENTIAL') {
if( leasehold == 'Yes' ){
return 'Rent'
} else
return 'Buy'
}
} else {
if( leasehold == 'Yes' ){
return 'Leasehold'
} else
return 'Freehold'
}
}
J'ai vu quelque chose à propos de Becker de la méthode, mais je ne pouvais pas vraiment le suivre. XPath n'est pas mon point fort, vraiment.
OriginalL'auteur Kirk WSI | 2012-10-19
Vous devez vous connecter pour publier un commentaire.
I. Dans XPath 2.0, tout simplement, on traduit cela à:
XSLT 2.0 vérification:
Lorsque cette transformation est appliquée sur le document XML fourni par le:
l'expression XPath est évaluée et le résultat de cette évaluation est copié à la sortie:
II. XPath 1.0 solution
Dans XPath 1.0 il n'y a pas un
if
opérateur.Une instruction conditionnelle peut encore être mis en œuvre avec un seul XPath 1.0 expression, mais c'est plus compliqué et l'expression ne peut pas être trop lisible et compréhensible.
Ici est une méthode générique (d'abord proposée par Jeni Tennison) pour produire
$stringA
lorsqu'une condition$cond
esttrue()
et de produire$stringB
:L'une des principales réalisations de cette formule est qu'il fonctionne pour les chaînes de caractères de longueur quelconque et pas de longueurs doivent être spécifiés.
Explication:
Ici, nous utilisons le fait que, par définition:
et
et que
Donc, si
$cond
estfalse
, le premier argument deconcat()
ci-dessus est:et c'est la chaîne vide, parce que
$stringA
a une longueur finie.De l'autre côté, si
$cond
esttrue()
le premier argument deconcat()
ci-dessus est:qui est juste
$stringA
.Ainsi, en fonction de la valeur de
$cond
seulement l'un des deux arguments deconcat()
ci-dessus est une chaîne non vide (respectivement$stringA
ou$stringB
).L'application de cette formule générique à la question spécifique, nous pouvons traduire la première moitié de la grande expression conditionnelle dans:
Cela devrait vous donner une idée de la façon de traduire l'ensemble de l'expression conditionnelle dans une seule expression XPath 1.0.
XSLT 1.0 vérification basée sur les:
Lorsque cette transformation est appliquée sur le document XML (ci-dessus), l'expression XPath est évaluée et le résultat de cette évaluation est copié à la sortie:
Ne remarque:
Si vous décidez de remplacer les chaînes spécifiques avec d'autres chaînes qui ont des longueurs différentes de celle de l'original, il vous suffit de remplacer ces chaînes dans le ci-dessus XPath 1.0 expression et vous n'avez pas à vous soucier de la spécification de toutes les longueurs.
OriginalL'auteur Dimitre Novatchev
Becker méthode de vos données est la suivante:
Neat. Mise à jour, merci.
OriginalL'auteur choroba
Passé toute la journée d'aujourd'hui, mais qui fonctionne pour moi, c'est pour Xpath 1.0:
OriginalL'auteur Pavel Philippenko
Essayer cette
sch
fichier ou dansxslt
???OriginalL'auteur Mirko Adari