xslt допускает аргументы в concat и normalize-space - PullRequest
3 голосов
/ 08 июня 2011

Я просматривал какой-то код и увидел это:

<xsl:variable name="newlist" select="concat(normalize-space($list), ' ')" />

Мне просто интересно с этой информацией, могу ли я с уверенностью сказать, что $ list - это string, и normalize-space($list) определенно вернет мне string, а строка concat(normalize-space($list), ' ') определенно вернет мне string (а последний символ этой строки - пробел?)

Ответы [ 2 ]

1 голос
/ 08 июня 2011

$list может быть строкой, числом, набором узлов, чем угодно. Результатом будет строка. И да, последний символ будет пробелом.

Например:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:variable name="node">
            <node>
                <subnode>string</subnode>
                <subnode>otherstring</subnode>
            </node>
        </xsl:variable>
    <xsl:variable name="string" select="concat($node,' ')"/>
    <xsl:value-of select="string-length($string)"/>
    <xsl:value-of select="substring-before($string,' ')"/>
    </xsl:template>

</xsl:stylesheet>

возвращает

18stringotherstring
0 голосов
/ 08 июня 2011

Я думаю, вы можете с уверенностью предположить, что это вернет строку, но вы не можете с уверенностью сказать, что $ list - это строка, так как normalize-space попытается сначала преобразовать в строку. например.

 <xsl:value-of select="concat(normalize-space(13), ' ')"/>

Будет работать.

Дополнительная информация о concat и normalize-space .

Также обратите внимание, что это может завершиться ошибкой, если $list установлен неправильно, например,

<xsl:variable name="list" select="12 34" />

Таким образом, вы никогда не сможете с уверенностью предположить, что это сработает, не увидев остальной код.

...