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 № 1Ich 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>