2011-09-27 6 views
0

Je suis en train de récupérer une (et une seule) apparition de l'élémentun attribut avec xPath plusieurs conditions

/Document/docOf/serviceEvent/effectiveTime/@value 

lorsque les

/Document/docOf/tempId/@root="1.3.5" 

Les éléments docOf peuvent se produire dans tous les Dans l'ordre, il n'y a aucune garantie que ceux avec le tempId recherché sont les premiers dans le xml.

J'ai essayé d'utiliser la fonction position() en combinaison avec tempId/@ root = "1.3.5" mais je trouve que cela ne fonctionne pas comme je le souhaite. Si j'écris

tempId/@root="1.3.5" and position()=1 

Je reçois le résultat correct, mais seulement quand la racine MATR_PROV/@ = éléments de « 1.3.5 » comparais devant ceux avec d'autres tempIds. Comment puis-je récupérer la valeur effectiveTime/@ d'un élément avec le bon tempId/@ root et le récupérer une seule fois?

<Document> 
    <docOf> 
     <tempId root="1.3.2"codeSystem="11.2.3"/> 
     <serviceEvent> 
      <code code="UXZX0A"/> 
     </serviceEvent> 
    </docOf> 
    <docOf> 
     <tempId root="1.3.5"/> 
     <serviceEvent classCode="ACT"> 
      <effectiveTime value="20101122145613+0100"/> 
     </serviceEvent> 
    </docOf> 
    <docOf> 
     <tempId root="1.3.5"/> 
     <serviceEvent classCode="ACT"> 
      <effectiveTime value="20101122145613+0100"/> 
     </serviceEvent> 
    </docOf> 
    <docOf> 
     <tempId root="1.3.2"/> 
     <serviceEvent> 
      <code code="UXZX0A" codeSystem="11.2.3"/> 
     </serviceEvent> 
    </docOf> 
</Document> 

Répondre

1

Essayez:

/Document/docOf[tempId/@root='1.3.5'][1]/serviceEvent/effectiveTime/@value 

Il obtient d'abord tous les docs avec root = 1.3.5 et sélectionne ensuite le premier nœud de cet ensemble. Il en extrait ensuite l'attribut value.

+0

Merci! Je pense que vous êtes sur quelque chose. Mon problème maintenant est de traduire cela en entrée dans StyleVision qui est l'outil graphique dans lequel je travaille: S – zsaren

Questions connexes