/ / xslt Übergeordnetes Element eines bestimmten verschachtelten untergeordneten Elements auswählen - xml, xslt

xslt wählt übergeordnetes bestimmtes verschachteltes Kind aus - xml, xslt

Ich bin nicht sehr erfahren in Xml / Xslt, also hoffe ichDas Forum würde meine Unwissenheit vergeben. Ich habe die folgende XML-Struktur, ich versuche, Label "Kategorie 1" zu bekommen, egal wo meine Variable in den Kind / Enkelknoten vorhanden ist: Könnten Sie bitte beraten.

===== XML ===========

<Result>
<sitemap>
<node>
<label>this is top node</label>
<node>
<label key="">Category 1</label>
<node>
<link>
<value>link1</value>
</link>
</node>
<node>
<link>
<value>link2</value>
</link>
<node>
<link>
<value>link21</value>
</link>
</node>
<node>
<link>
<value>link22</value>
</link>
</node>
</node>
</node>

<node>
<label key="">Category 2</label>
</node>
</node>
</sitemap>
</Result>

=================XSLT 2.0 ================
<xsl:variable name="myvalue" select=""link22"" />
<xsl:if test="//node[node[link/value=$myvalue]]/node">
<xsl:value-of select="//node[node[link/value=$myvalue]]/label" />
</xsl:if>

================================ link2

Antworten:

0 für die Antwort № 1

Ich rate meistens hier, aber gegeben:

<xsl:variable name="myvalue" select=""link22"" />

die folgende Anweisung:

<xsl:value-of select="//link[value=$myvalue]/ancestor::node[label][1]/label" />

wird zurückkehren:

Category 1

Eine effizientere Methode würde einen Schlüssel verwenden, um die zu lokalisieren link Element von seiner value, d.h.

<xsl:key name="link-by-value" match="link" use="value" />

(auf der obersten Ebene) und dann:

<xsl:value-of select="key("link-by-value", $myvalue)/ancestor::node[label][1]/label" />

0 für die Antwort № 2

Versuche dies

    <xsl:variable name="myvalue" select=""link22"" />
<xsl:if test="//node[node/link/value=$myvalue]">
<xsl:value-of select="//node[node/link/value=$myvalue]/link/value" />
</xsl:if>