Я хочу найти конкретный узел в структуре рекурсивных узлов и прочитать значение (я) внутри самого последнего. Решение, которое я попробовал, состоит в том, чтобы вызвать шаблон рекурсивно с поиском условия, затем поместить результат в переменную, а затем перебрать переменную by for-each. Например, my.xml:
<test>
<test>
<test>
<test result='passed'>
<metadata data='1'/>
</test>
<test result='passed'>
<metadata data='2'/>
</test>
<test result='passed'>
<metadata data='3'/>
</test>
</test>
</test>
</test>
my.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="my_template">
<xsl:param name="node"/>
<xsl:if test="$node/@result and $node/@result != 'undefined'">
<xsl:value-of select="./metadata/@data"/>
</xsl:if>
<xsl:for-each select="$node/test">
<xsl:call-template name="my_template">
<xsl:with-param name="node" select="." />
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">
<xsl:variable name="var">
<xsl:call-template name="my_template">
<xsl:with-param name="node" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="$var">
<xsl:if test="position() = last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Результат, который я получаю:
123
Но я ожидал получить только'3'
Что я делаю не так?
Кажется, переменная $ var получает «123» как одно значение, если я добавлю «,» после, я получу «123». Я ожидал получить набор узлов в $ var для извлечения последнего значения.
Может быть, есть другой способ решить задачу? Спасибо!