Ошибка проверки типа выражения при использовании xalan

Идея состоит в том, чтобы выбрать подмножество меток с определенным языковым кодом:

  <xsl:variable name="extLangCode" select="//Invoice/@languageId" />

  <xsl:include href="./labels.xsl" />

  <xsl:variable name="labelsXml">
    <xsl:call-template name="labels" />
  </xsl:variable>

  <xsl:variable name="labels" select="$labelsXml/labels/label[@lang=$extLangCode]" />

часть label.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="labels">
        <labels>
            <label key="pageNr" lang="kl">Page</label>
            <label key="pageNr" lang="en">Page</label>

Выбрасывает:

[FATAL]: тип проверки ошибки выражения 'FilterParentPath (переменная-ссылка (labelsXml / result-tree), ParentLocationPath (step ("child", 16), step ("child", 18, pred (= (step (" attribute ", 17), ссылка-переменная (extLangCode / node-set)))))) '.


person J.Olufsen    schedule 27.11.2019    source источник


Ответы (1)


Xalan - это процессор XSLT 1, в XSLT 1 ваша переменная является фрагментом результирующего дерева, и вы не можете применить XPath к фрагментам результирующего дерева, не преобразовав их сначала в наборы узлов, поэтому вам нужно, например, <xsl:variable name="labels" select="exsl:node-set($labelsXml)/labels/label[@lang=$extLangCode]" xmlns:exsl="http://exslt.org/common"/>.

person Martin Honnen    schedule 27.11.2019