Мои вопросы находятся внизу этой публикации, если вы хотите прочитать их перед полным объяснением.
Я конвертирую XML-документ на симпатичную веб-страницу с помощью XSL, и у меня возникают проблемы с правильной передачей переменной. У меня есть много xsl:template
, и нужно передать конкретный параметр только одному из них. Я надеялся, что смогу передать именованный параметр, который предположительно будет отправлен на все xsl:template
s, но будет использоваться только одним и игнорироваться другими. Однако, пытаясь проверить это для себя (и мое ограниченное понимание XSL), я не смог вообще передать этот параметр, не говоря уже о том, что он случайно нарушил другие xsl:template
s.
Ниже приведен упрощенный примерный код (типизированный для этого вопроса, он может содержать опечатку или два). У меня много разных xsl:template
, определенных для работы с узлами в XML, и все работает до сих пор. Он заключается в добавлении параметра к этим шаблонам, которые, как представляется, возникают с проблемами.
XML файл:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main.xsl"?>
<wrapperNode>
<testNode>
<subNode/>
</testNode>
</wrapperNode>
main.xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="test.xsl"/>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates>
<xsl:with-param name="testParam">TEST_PARAMETER</xsl:with-param>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
test.xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="testNode">
<xsl:param name="testParam" />
TEST1
<xsl:value-of select="$testParam" />
TEST2
</xsl:template>
</xsl:stylesheet>
Выход (фактический):
TEST1 TEST2
Выход (ожидаемый/желаемый):
TEST1 TEST_PARAMETER TEST2
Мои вопросы относительно этого:
-
Можно ли отправить имя параметр для всех моих
xsl:template
с использованиемxsl:apply-templates
сxsl:with-param
, но выберите это значение конкретноname=
внутри фактический шаблон, чтобы он мог быть явно использована в одном шаблон и игнорируется всеми остальными (даже если бы я хотел добавить другое, по-разному названные, параметры для другие шаблоны позже)? -
Что я делаю неправильно с моим текущим примером кода, который, кажется, вообще не принимает параметр?
-
Есть ли лучший способ сделать это?
Изменить: Я хочу пояснить, что из-за другого вывода в шаблоне test.xsl
: testNode
я точно знаю, что он успешно вызван. Это ТОЛЬКО параметр, который не работает. Я не хочу тратить время на то, чтобы выяснить, почему этот шаблон не называется. Это.
Обновление: В ответ на полученные мной ответы, в которых указывалось, что пример, который я составил, был не совсем правильным (моя ошибка) и не очень четко показывал проблему (то есть: вызывается правильный шаблон, но видно, что только параметр не работает), я заменил примеры гораздо лучшими. Этот пример более четко показывает, что шаблон testNode
успешно вызывается, но этот параметр, кажется, не передается. Я проверил это много раз, до и после рассмотрения предыдущих ответов на этот вопрос. Я абсолютно тупик, поскольку все кажется правильным из того, что я читал в другом месте и что люди предлагали до сих пор.