Что не так с моим? - PullRequest
       18

Что не так с моим?

1 голос
/ 20 апреля 2011

У меня есть xsl:param, который я пытаюсь использовать для сопоставления шаблона с атрибутом. Судя по всему, что я нашел здесь и в Интернете, я делаю это правильно. Тем не менее, мой вывод пуст.

Вот мой xslt

<xsl:param name="strm_name">main</xsl:param>    
<xsl:template match="stream[@name='{$strm_name}']"></xsl:template>

Если я жестко закодирую вызов param для "main", это прекрасно работает.
Вот тег XML, к которому я пытаюсь найти соответствие.

<doc><stream name="main"></stream></doc>

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 20 апреля 2011

Я вижу две проблемы:

  1. Вы не можете использовать переменную или ссылку на параметр в шаблоне соответствия в XSLT 1.0
  2. Вам не нужно окружающее '{...}' при ссылке напараметр в предикате.(Вероятно, вы путаете это с шаблоном значения атрибута.) Используйте это вместо: stream[@name=$strm_name]

Возможный обходной путь для проблемы № 1 - выбрать только те элементы, которые соответствуют критериям, контролируемым вашимпары.(Вы можете ссылаться на параметр в выражении выбора).

Например, эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:param name="strm_name" select="'main'"/>
    <xsl:template match="/">
        <xsl:apply-templates select="/*/stream[@name=$strm_name]" />
    </xsl:template>
    <xsl:template match="stream">
        <xsl:apply-templates />
        <xsl:text>/</xsl:text>
    </xsl:template>
</xsl:stylesheet>

Применительно к этому документу:

<root>
    <stream name="main">1</stream>
    <stream name="other">2</stream>
    <stream name="main">3</stream>
    <stream name="main">4</stream>
    <stream name="other">5</stream>
    <stream name="other">6</stream>
</root>

... соответствует только нужным узлам.Выход:

1/3/4/
...