2017-01-06 3 views
0
  <p> 
      <p1>c</p1> 
      <a languageCode="en">a1</a> 
      <a languageCode="de">a2</a> 
      <ca> 
       <cc>056</cc> 
       <cs>BE-VAN</cs> 
       <cs>BG-VLI</cs> 
       <cs>BG-VLI</cs> 
      </ca> 
      <ca> 
       <cc>056</cc> 
       <cs>BE-VAN</cs> 
       <cs>BG-VLI</cs> 
       <cs>BG-VLI</cs> 
      </ca> 
     </p> 

Ich habe versucht, das funktioniert nicht:preceding-sibling des Elternelements in Xslt

<xsl:for-each select="p/ca/*"> 
    <xsl:if test="not(preceding-sibling::*[1]/name() = local-name())"> 
      <precedingParent n="{preceding-sibling::*[1]/parent::*/name()}"></precedingParent> 
    </xsl:if> 
</xsl:for-each> 

aber erwartet ausgegeben werden soll:

<precedingParent n="a"></precedingParent> 

ich in ca bin Looping und zum Beispiel beim ersten Vorkommen von cs Wenn eine Suche nach dem vorhergehenden Geschwister des Elterns für Eltern ca für Element cs? wie mache ich es?

+0

Können Sie Zeigen Sie den relevanten Teil Ihres XSLT-Codes, damit wir sicher sein können, dass wir den richtigen Kontext haben. Vielen Dank! –

+0

10 @TimC Ich habe die Frage aktualisiert können Sie mir jetzt helfen? – divya

Antwort

2

Der gesuchte Ausdruck ist ../preceding-sibling::*[1]/name(). Zum Beispiel

<xsl:for-each select="p/ca/*"> 
     <xsl:if test="not(preceding-sibling::*[1]/name() = local-name())"> 
      <precedingParent n="{../preceding-sibling::*[1]/name()}"></precedingParent> 
     </xsl:if> 
    </xsl:for-each> 

Beachten Sie, dass name(../preceding-sibling::*[1]) würde auch (in XSLT 1.0 und XSLT 2.0).

Auf der anderen Seite, können Sie etwas effizienter durch eine verschachtelte Schleife mit, und immer den vorhergehenden Wert vor der Auswahl der untergeordneten Elemente sein könnte, speichern Sie es jedes Mal neu berechnet werden müssen:

<xsl:for-each select="p/ca"> 
     <xsl:variable name="precedingParent" select="name(preceding-sibling::*[1])" /> 
     <xsl:for-each select="*"> 
      <xsl:if test="not(preceding-sibling::*[1]/name() = local-name())"> 
       <precedingParent n="{$precedingParent}"></precedingParent> 
      </xsl:if> 
     </xsl:for-each>   
    </xsl:for-each>  
+0

cool das funktioniert. – divya

Verwandte Themen