2010-05-13 2 views
0

Ситуация У меня два файла xslt: один вызывается из моего кода ASP.NET, и там импортируется второй файл xslt.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); 

И я ловлю Парам на первой XSLT так:

<xsl:param name="fbLikeFeatureName" /> 

И затем, передавая его второй XSLT, как это (ранее я импортировать этот файл):

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

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

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

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

ответ

1

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

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» установлен в «This is a test». Я получаю следующий результат (Saxon-B 9.1.0.7):

+0

. Я подтвердил, что приведенный выше код работает и на MSXML –

+0

. Я не знаю, почему Я не могу заставить его работать ... Я делаю все, что ты мне сказал. –

+0

Ну, я признаю, что я гораздо больше разбираюсь в XSL-эксперте, чем эксперт на C#, но где в вашем примере кода вы добавляете список параметров в преобразование? Я вижу, где вы создаете oArgs, и я вижу, где вы его заполняете, но он не упоминается в строке, где вы выполняете преобразование. –

2

Вы не устанавливаете значение параметра при его передаче в шаблон 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, имя атрибута устанавливается на имя параметра, используемый вызываемым шаблона (Articles в данном случае). Затем вы используете select (или тело xsl:with-param), чтобы установить значение.

+0

Спасибо. Однако, похоже, он не работает. По крайней мере, текст не отображается в браузере (он должен отображать значение параметра). –

+0

Является ли имя attrobite with-param точно таким же, как атрибут name param? Есть ли значение fbLikeFeatureName вне статей? –

+0

Хорошо, если вы посмотрите на код ASP.NET, который я написал выше, вы увидите его значение «Facebook_Like_Button». –

Смежные вопросы