/ / xslt изберете родител на специфично вложено дете - xml, xslt

xslt избира родител на специфично вложено дете - xml, xslt

аз не съм много опитен в Xml / Xslt така се надявамфорумът щеше да ми прости невежеството. Имам следната xml структура, аз се опитвам да получа етикет "Категория 1", без значение къде ми променлива съществува в детето / внуче възли: Бихте ли ми посъветвали.

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

================= Output =============== link2

Отговори:

0 за отговор № 1

Аз съм най-вече познае тук, но се дава:

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

следващата инструкция:

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

Ще се върне:

Category 1

По-ефективният метод ще използва ключ за намиране на link елемент от неговата value, т.е .:

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

(на най-високо ниво) и след това:

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

0 за отговор № 2

Опитайте тази

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