xslt 2.0 - получить последний узел из рекурсивной структуры - PullRequest
0 голосов
/ 11 декабря 2019

Я хочу найти конкретный узел в структуре рекурсивных узлов и прочитать значение (я) внутри самого последнего. Решение, которое я попробовал, состоит в том, чтобы вызвать шаблон рекурсивно с поиском условия, затем поместить результат в переменную, а затем перебрать переменную 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 для извлечения последнего значения.

Может быть, есть другой способ решить задачу? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...