XSLT - параметры отлова - PullRequest
0 голосов
/ 13 мая 2010

Ситуация такова, что у меня есть два xslt-файла: один вызывается из моего кода ASP.NET, а там второй xslt-файл импортируется.

Что я хотел бы сделать, это передать параметр первому, чтобы второй xslt (тот, который импортируется в первый xslt) мог прочитать его.

Мой код на c # выглядит так:

    var oArgs = new XsltArgumentList();
    oArgs.AddParam("fbLikeFeatureName", "", "Facebook_Like_Button");
    ltlContentBody.Text = xmlUtil.TransformXML(oXmlDoc, Server.MapPath(eSpaceId + "/styles/ExploringXSLT/ExploreContentObjects.xslt"), true);

И я ловлю param при первом xslt так:

<xsl:param name="fbLikeFeatureName" />

И затем, передавая его второму xslt следующим образом (ранее я импортировал этот файл):

<xsl:call-template name="Articles">
    <xsl:with-param name="fbLikeFeatureName"></xsl:with-param>
  </xsl:call-template>

Наконец, я ловлю param во втором файле xslt следующим образом:

<xsl:value-of select="$fbLikeButtonName"/>

Что я делаю не так? Я новичок в xslt.

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

Вы не устанавливаете значение параметра при передаче его в шаблон Articles. Попробуйте

<xsl:call-template name="Articles">
  <xsl:with-param name="fbLikeButtonName" select="$fbLikeFeatureName"/>
</xsl>

и десять

<xsl:template name="Articles">
  <xsl:param name="fbLikeButtonName"/>
   ...
  <xsl:value-of select="$fbLikeButtonName"/>
   ...
</xsl:template>

При использовании with-param атрибуту name присваивается имя параметра, которое используется вызываемым шаблоном (в данном случае Articles). Затем вы используете select (или тело xsl:with-param) для установки значения.

1 голос
/ 14 мая 2010

Вам не нужно «передавать» параметр из первой таблицы стилей в импортированную таблицу стилей. Когда вы объявляете параметр на верхнем уровне первой таблицы стилей, он автоматически отображается для всех импортированных таблиц стилей. Рассмотрим следующие таблицы стилей:

template1.xsl:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="template2.xsl"/>
    <xsl:param name="input-param"/>
    <xsl:template match="/">
        <xsl:apply-templates select="doc"/>
    </xsl:template>
</xsl:stylesheet>

Что импортирует template2.xsl:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="doc">
        <xsl:value-of select="$input-param"/>
    </xsl:template>
</xsl:stylesheet>

Затем я преобразовал следующий документ:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="template1.xsl"?>
<doc/>

с входным параметром "input-param", установленным на "Это тест". Я получаю следующий вывод (Saxon-B 9.1.0.7):

This is a test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...