2017-08-04 1 views
0

Je suis nouveau à XPath je noeud qui aura toute personne de l'attribut permet de dire .. lang et nolang ....Comment obtenir la valeur de l'attribut s'il existe ou l'obtenir d'un autre attribut dans Xpath?

ici est mon xml

<employee> 
<name>krishana</name> 
<speaks lang="kannada"></speaks> 
</employee> 

<employee> 
<name>alien</name> 
<speaks nolang="nolangauge"></speaks> 
</employee> 

Je dois écrire XPath Si le nœud IF a lang, obtenir la valeur de lang .... sinon si le nœud a nolang obtenir la valeur de nolang.

Je suis en mesure d'obtenir de quelqu'un de ceux qui, comme * // employé/parle/@ lang ou * // employé/parle/@ nolang J'ai besoin à la fois condition dans une expression XPath ...

S'il vous plaît aider sur ce ...

+0

Voulez-vous dire '// employee/speak/@ * [name() = (" lang "," nolang ")]'? – Andersson

+0

@Andersson pouvez-vous me dire en anglais le XPath ci-dessus ce qu'il fait ?? –

+0

Renvoie la valeur de l'attribut avec le nom '' lang ''ou' "nolang" 'issu du noeud' speaks' – Andersson

Répondre

1

supposant que vous êtes dans le contexte de employee, vous pouvez utiliser:

<xsl:value-of select="(speaks/@lang | speaks/@nolang)[1]" />   

pour obtenir la valeur de la première des deux attributs qui existe.

+0

Je n'ai pas compris votre expression va-t-elle me donner la valeur de n'importe lequel de ces attributs..lettres disent que nous avons nolang donc ça renverra nolanguage et si ça a lang ça va renvoyer eng ?? –

+0

@GopiLal Oui. Si cela ne répond pas à votre question, veuillez ajouter une explication de ce dont vous avez exactement besoin (et pourquoi) et quel est le résultat attendu dans l'exemple donné. –

+0

Comme vous n'avez pas compris l'expression, je vais essayer de l'expliquer. '(parle/@ lang | parle/@ nolang)' essaie de créer une collection de 2 valeurs. Le premier vient de l'attribut 'lang' et le second de l'attribut' nolang'. J'ai délibérément écrit * try * car des valeurs inexistantes n'entreront pas dans cette collection. Donc, si par ex. l'élément 'employee' actuel n'a pas d'attribut' lang' mais a 'nolang', alors cette collection contiendra effectivement ** un seul élément **. Regardez maintenant la finale '[1]'. Il indique qu'à partir de cette collection juste créée, seul le premier élément ** sera retourné. Juste comme tu veux. –