Использование динамического xpath в XSLT - PullRequest
1 голос
/ 07 декабря 2010

Я использую переменную, скажем, xpathvar в XSLT, значение которой будет предоставлено во время вызова XSLT.Как я могу достичь этого?Мой XSLT-файл выглядит так -

<xsl:param name="xpathvar"/>
<xsl:param name="keyxpath"/>
 <xsl:template match="/">
  <listofResults>
    <xsl:for-each select="$xpathvar">
    <keyvalues><xsl:value-of select="xalan:evaluate(substring-before($keyxpath,'||'))"/></keyvalues>
    <keyvalues><xsl:value-of select="xalan:evaluate(substring-after($keyxpath,'||'))"/></keyvalues>
    </xsl:for-each>
  </listofResults>
 </xsl:template>
</xsl:stylesheet>

Если я упомяну переменную в for-each, он выдаст ошибку.Пожалуйста, руководство, как я могу достичь этого.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 декабря 2010

Если я упомяну переменную в для каждого выдает ошибку

В XSLT 1.0 (похоже, вы используете Xalan) вы можете перебирать только наборы узлов. Таким образом, $xpathvar должен быть экземпляром типа данных набора узлов.

В XSLT 2.0 вы можете выполнять итерации по последовательности (включая скалярные значения).

Кроме того, если строка, содержащая «динамическое» выражение XPath, достаточно проста (только шаг теста QName, возможно, позиционные предикаты), это можно сделать (как уже было сказано в SO) со стандартным XSLT.

0 голосов
/ 07 декабря 2010

Согласно Global xsl: param, содержащему строку выражения xpath это не может быть сделано чисто с простым старым XSLT, вам необходимо использовать расширение оценивать , см .: Xalan оценить выражение

0 голосов
/ 07 декабря 2010

Я не думаю, что это можно сделать так, вы должны использовать xpath, например, будет

<template match="Node[name=$xpathvar]" />


<xsl:for-each select="*[name()=$xpathvar]">
</xsl:for-each>

Я думаю, что это не позволяет вам использовать переменную напрямую, потому что это не набор узлов.

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