2017-09-11 2 views
0

Sous deux sections d'un fichier XML.Sélectionnez une valeur unique avec plusieurs correspondances

J'essaie de faire correspondre un noeud avec le nom cutSeven et sélectionnez son premier texte de childnodes.

Le chemin de correspondance est inconnu, de sorte que chaque XML a des informations similaires dans différentes positions. Je travaille avec plusieurs XML et je suis sur le point de créer une vue d'ensemble pouvant être mise à jour automatiquement.

entrée XML

<Transform> 
    <param name="originalHeader"> 
     <path>$header</path> 
    </param> 
    <param name="cutSeven"> 
      <path>"fi.siikjin.exitorder.seasam.accesscontrol.k1"</path> 
    </param> 
</Transform> 
. 
. 
. 
<Transform> 
    <param name="originalHeader"> 
     <path>$header</path> 
    </param> 
    <param name="cutSeven"> 
      <path>"fi.siikjin.exitorder.seasam.accesscontrol.k1.accesscontrol_k1.accesscontrol"</path> 
    </param> 
</Transform> 

Mon expression

<xsl:value-of select="//@name[normalize-space(.) = 'cutSeven']/parent::*[1]"/> 

me amène à la sortie:

<path>"fi.siikjin.exitorder.seasam.sec.accesscontrol.k1"</path> 
<path>"fi.siikjin.exitorder.seasam.sec.accesscontrol.k1.accesscontrol_k1.accesscontrol"</path> 

attendu:

<path>"fi.siikjin.exitorder.seasam.accesscontrol.k1"</path> 

Comment puis-je sélectionner uniquement le premier nœud correspondant et ignorer d'autres correspondances? Ou en accord avec moi, sortie seulement 1 valeur. Merci dans le conseil!

Répondre

2

//*[@name = 'cutSeven'] sélectionne tous les éléments dont la valeur d'attribut est name et (//*[@name = 'cutSeven'])[1] uniquement le premier de ces éléments.

+0

Merci beaucoup! '(// @ nom [normalize-space (.) = 'cutSeven']) [1]/parent :: *' travaille pour moi – MypR