xslt - 用变量/函数替换 XPath 表达式

标签 xslt xpath xslt-2.0

我有一个 XSLT 2.0 样式表。我需要执行一个 for-each-group 循环,但我分组的值可能会根据传递给样式表的参数而改变。

例如,如果我的 XML 看起来像这样(此示例已简化):

<root><row><date>2001-01-01</date><text>abc</text></row><row><date>2003-04-02</date><text>xyz</text></row>...</root>

我想执行一个for-each-group,对应用于日期节点的函数进行分组。例如,它可能是这样的:
<xsl:for-each-group select="/root/row" group-by="substring(date,1,4)">

或这个:
<xsl:for-each-group select="/root/row" group-by="substring(date,1,7)">

我什至可能需要在不同的节点上进行分组,例如 .所以我可以使用:
<xsl:for-each-group select="/root/row" group-by="$variable">

有没有办法用我想要分组的函数和节点定义一个变量,然后在 group-by 表达式中使用该变量?或其他方式来做到这一点?我尝试使用一个简单的变量,但这两者都不起作用(第二个在单引号内):
<xsl:variable name="variable" select="substring(date,1,4)"/>


<xsl:variable name="variable" select="'substring(date,1,4)'"/>

我有一个相关的问题,但它可能有相同的答案。我还需要执行一个选择也需要使用相同变量的地方,例如:
<xsl:value-of select="/root/row/$variable"/>

谢谢!

最佳答案

您可以使用 substring(*[local-name() = $var1], 1, $var2)然后在哪里绑定(bind) var1'date'和另一个具有数值的变量。

关于xslt - 用变量/函数替换 XPath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27786927/

相关文章:

php - 使用 zend 1.12 在 mysql 中保存 xslt 表单

xml - XSLT 函数插入前无法识别

XSLT |选择/何时

python - 如何使用 Selenium 和 xpath 在 Google 登录页面中选择电子邮件或电话字段?

java - XML解析问题

xml - 使用 XSLT 2 时,Schematron 会忽略在其上下文中具有属性的规则

Java 转换器错误 : Could not compile stylesheet

xpath - 我可以将 xpath 2.0 与 firefox 和 selenium 一起使用吗?

javax.xml.transform.TransformerException : Could not find function: unparsed-text

xslt - 获取element的所有子节点