在XSLT select中使用变量

Ale*_*lex 1 xml xslt xslt-2.0

我试图制作一个命名模板或函数,在其中传递节点名称,它将选择该名称或模板作为xpath表达式的最后一层。但是它返回的只是我作为参数传入的字符串。在下面的示例中,返回的值是“ name”

XSLT:

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

    <xsl:output indent="yes"></xsl:output>

    <xsl:template name="get-prefered">
        <xsl:param name="field-name"/> 

        <xsl:variable name="vCondition" select="name"/>
        <xsl:variable name="x" select="sources/source[@type='C']/$field-name"/>
        <xsl:value-of select="$x"></xsl:value-of>
    </xsl:template>

    <xsl:template match="/">
        <xsl:call-template name="get-prefered">
            <xsl:with-param name="field-name">name</xsl:with-param>
        </xsl:call-template>
        </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<sources>
    <source type='C'>
        <name>Joe</name>
        <age>10</age>
    </source>
    <source type='B'>
        <name>Mark</name>
        <age>20</age>
    </source>
</sources>
Run Code Online (Sandbox Code Playgroud)

小智 5

更改

<xsl:variable name="x" select="sources/source[@type='C']/$field-name"/>
Run Code Online (Sandbox Code Playgroud)

<xsl:variable name="x" select="sources/source[@type='C']/*[name()=$field-name]"/>
Run Code Online (Sandbox Code Playgroud)

它返回:

Joe
Run Code Online (Sandbox Code Playgroud)