XSLT, как получить значение, когда переменная равна имени узла? - PullRequest
0 голосов
/ 01 ноября 2019

Я унаследовал проект XSLT 1.0, и я не знаю много XSLT.

У меня есть внешний XML-файл со списком кодов. Я хочу использовать этот файл, чтобы получить значение узла на основе переменной. Когда $ source = "AFW", я хочу получить "XML-AP", а когда $ source = "SAGITTA", я хочу получить "XML".

Частичный список поискового файла XML:

<codes name="AcordToMSA_CodeLists">
    <Source>
        <codes>
            <AFW>XML-AP</AFW>
            <SAGITTA>XML</SAGITTA>
        </codes>
    </Source>
</codes>

XSLT для файла поиска theXML:

<xsl:variable name="lookupFileSource" select="document('XSL/AcordToMSA_CodeLists.xml')/codes" />



<Home>
    <xsl:variable name="source" select="Top/ClientApp/Name"/>
    <xsl:attribute name="Source"><xsl:value-of select="$lookupFileSource/Source/codes[local-name() = 'AFW']"/></xsl:attribute>
</Home>

У строки атрибута, которую я имею выше, возвращается пустая строка. Что мне нужно сделать, чтобы получить значение для узла, когда переменная $ source равна имени узла?

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вам нужно проверить элемент child's local-name, поэтому

<xsl:attribute name="Source"><xsl:value-of select="$lookupFileSource/Source/codes/*[local-name() = 'AFW']"/></xsl:attribute>
0 голосов
/ 01 ноября 2019

Когда $ source = "AFW", я хочу получить "XML-AP", а когда $ source = "SAGITTA", я хочу получить "XML".

Я считаю, что это будет означать:

<Home>
    <xsl:attribute name="Source">
        <xsl:value-of select="$lookupFileSource/Source/codes/*[name()=$source]"/>
    </xsl:attribute>
</Home>

или коротко:

<Home Source="{$lookupFileSource/Source/codes/*[name()=$source]}"/>
...