Назначение значения параметра в xsl: для каждого - PullRequest
0 голосов
/ 22 октября 2009

Может ли кто-нибудь, кто работал с XSLT, помочь мне в этом?

Я использую XSL версии 1.0.

Я объявил параметр в XSL-файле, например:

<xsl:param name="HDISageHelpPath"/>

Теперь я присваиваю значение этому параметру со страницы asp. Значение, которое я назначаю, равно "document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help". Теперь я хочу присвоить этот параметр <xsl for each>, как

<xsl:for-each select="msxsl:node-set($HDISageHelpPath)" > (это не работает)

Но это не работает. Я проверил значение параметра, отладив его, как показано ниже

<debug tree="$HDISageHelpPath">
    <xsl:copy-of select="$HDISageHelpPath"/>
</debug>

Я могу напечатать значение, и оно кажется правильным. Фактически, когда я назначаю статический путь ("document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help") путем его жесткого кодирования, он работает

<xsl:for-each select="document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help"> (This works)

Может кто-нибудь, пожалуйста, дайте мне знать, почему присвоение параметра xsl:for-each не работает?

Примечание: я сослался на сайт "http://www.dpawson.co.uk/xsl/sect2/N1553.html"

1 Ответ

0 голосов
/ 22 октября 2009

Вы не можете легко оценить динамические строки как выражения XPath в XSLT 1.0. Обычно они должны быть жестко закодированы.

Есть EXSLT dyn:evaluate(), но я сомневаюсь, что вы можете использовать это с процессором MXSML.

В качестве альтернативного подхода вы можете попробовать передать только путь к файлу:

<xsl:param name="HDISageHelpFilePath"/>
<!-- ... -->
<xsl:for-each select="document($HDISageHelpFilePath)/HelpFiles/Help">
</xsl:for-each>

или создание заполнителя, заменив его на поиск и замену перед загрузкой действительного кода XSL в процессор (в виде строки). Это немного грязно и подвержено ошибкам, но может дать вам возможность использовать реальное динамическое выражение XPath.

<xsl:for-each select="%HELP_FILE_XPATH%">
</xsl:for-each>

Загрузите файл в виде текста, замените %HELP_FILE_XPATH% на ваш фактический XPath, подайте его в процессор. Если он загружается, у вас все хорошо, если нет, ваш входной XPath был искажен.

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