Я не слишком уверен, правильно ли я понял вашу проблему, однако я все же попробую.
Когда вы пытаетесь получить значение с помощью шаблона getvalueofnode
, вы указываете /header/en
в качестве пути. Шаблон отрежет строку перед первой косой чертой и будет искать элемент с таким именем в вашей конфигурации. Случается, что отрубленное значение - это пустая строка, в результате которой ваш шаблон ищет элемент в конфигурации без имени (которого не существует).
Следовательно,
$content
будет пустым фрагментом дерева результатов во втором вызове (первом рекурсивном вызове). Поскольку в этом шаблоне нет косой черты, выведите значение, которого там нет, и, следовательно, пустой фрагмент дерева результатов. Поскольку пустые фрагменты дерева при печати преобразуются в пустую строку, ваш вывод будет просто:
<p>value: </p>
Относительно решения: просто удалите косую черту при первом вызове шаблона. Это использовать:
<xsl:call-template name="getvalueofnode">
<xsl:with-param name="path" select="concat('header/',$lang)" />
</xsl:call-template>
В результате ваше преобразование будет содержать заголовок на английском языке.
Кстати, ваш вызов getvalueofnode
инкапсулирован в <p>
, как и место, где он возвращает свое значение. Это приводит к вложенным тегам абзаца в окончательном выводе.