2017-09-11 9 views
0

Unten zwei Abschnitte einer XML-Datei.Wählen Sie einen einzelnen Wert mit mehreren Übereinstimmungen aus

Ich versuche, einen Knoten mit dem Namen cutSeven zu vergleichen und seinen ersten childnodes-Text auszuwählen.

Der passende Pfad ist unbekannt, daher hat jedes XML ähnliche Informationen in verschiedenen Positionen.

Ich arbeite mit mehreren XMLs einschließlich dieser Informationen und ich bin auf dem Weg, um eine automatisch aktualisierbare Übersicht dafür zu erstellen.

XML-Input-

<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> 

Mein Ausdruck

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

bringt mich zur Ausgabe:

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

Erwartet:

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

Wie kann ich nur den ersten übereinstimmenden Knoten auswählen und weitere Übereinstimmungen ignorieren? Oder, laut mir, gib nur 1 Wert aus. Danke in Beratung!

Antwort

2

//*[@name = 'cutSeven'] wählt alle Elemente mit diesem name Attributwert und (//*[@name = 'cutSeven'])[1] nur das erste dieser Elemente aus.

+0

Vielen Dank! '(// @ name [normalize-space (.) = 'cutSeven']) [1]/parent :: *' arbeitet für mich – MypR

Verwandte Themen