2008-08-07 12 views
13

Ich hätte gedacht, dass dies ein einfacher zu Google wäre, aber ich war nicht erfolgreich.Wie verwenden Sie eine Variable in xsl, wenn Sie versuchen, einen Knoten auszuwählen?

Ich möchte eine Variable den Wert aus einem Attribut zuweisen (bisher einfach) und dann diese Variable verwenden, um einen anderen Knoten basierend auf dem Wert dieses Attributs auszuwählen.

Beispiel:

<xsl:variable name="myId" select="@id" /> 
<xsl value-of select="//Root/Some/Other/Path/Where[@id='{@myId}']/@Name /> 

, das nicht funktioniert. Wenn ich die {@myId} durch den Wert in der Variablen ersetze, findet sie zwar den richtigen Knoten, aber sie wird auf diese Weise nicht erzeugt. Ich bin mir sicher, dass ich etwas vermisse, oder vielleicht gibt es einen anderen Weg, es zu tun.

Der Kontext ist, dass es Daten unter verschiedenen Top-Level-Knoten gibt, die den gleichen ID-Wert teilen, so dass ich die zugehörigen Knoten in meiner Vorlage erhalten muss.

Antwort

16

Ok, ich habe es endlich herausgefunden. Dummes Problem wirklich, ich musste einfach die Anführungszeichen und die geschweiften Klammern weglassen. Eine dieser Zeiten, als ich dachte , dass ich das bereits versucht hatte. : D Oh, und ich vertippte @myId im ersten Beispiel, der Code war tatsächlich $ myId.

<xsl:variable name="myId" select="@id" /> 
<xsl value-of select="//Root/Some/Other/Path/Where[@id=$myId]/@Name" /> 
+0

Es ist noch ein Zitat, das nicht da sein sollte. Es ist eine sehr kleine Bearbeitung, also kann ich es nicht machen, ohne auch den Text zu ändern (minimale Zeichenanzahl).

+0

Danke, ich denke, das stimmt jetzt, ich habe auch das abschließende Doppelzitat am Ende vermisst. – palehorse

4

Sie scheinen mit der Verwendung einer variablen verwirrt zu haben (was nur $ Variable) und Attributwert Vorlagen, mit denen Sie in einigen Attributen jeden XPath-Ausdruck bringen, z.B.

<newElement Id="{@Id}"/> 

Sie können natürlich kombiniert werden, so dass Sie eine Variable in einem Attributwert-Template, wie können sein:

<newElement Id="{$myId}"/>