gpt4 book ai didi

java - XSL : Pass string value to template match

转载 作者:行者123 更新时间:2023-12-02 10:50:40 26 4
gpt4 key购买 nike

我想将 xpath 字符串从 java 传递到 XSL 模板。我尝试过这些

<xsl:template
match="string($fullxpath)">

<xsl:template
match="$fullxpath">

这有效

xpath value: <xsl:text/>
<xsl:value-of select="$fullxpath" />

但是匹配不起作用。请帮忙!!

最佳答案

一般来说这是不可能的,您需要学习区分允许 XPath 表达式 计算值的属性(例如 xsl 的 select :value-of https://www.w3.org/TR/xslt-30/#value-of )和属于 pattern 的属性(例如 xsl:template https://www.w3.org/TR/xslt-30/#defining-templatesmatch )。

然而,在 XSLT 3 中,有一个新选项,即所谓的影子属性 https://www.w3.org/TR/xslt-30/#shadow-attributes 以及静态参数 https://www.w3.org/TR/xslt-30/#static-params:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">

<xsl:param name="pattern1" as="xs:string" static="yes" select="'foo/bar'"/>

<xsl:mode on-no-match="shallow-copy"/>

<xsl:template _match="{$pattern1}"/>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/jyH9rMM

如您所见,阴影属性_match设置为静态参数值。

一种不同的、更复杂的方法,但也可能在 XSLT 3 和 Saxon 9.8 所有版本或其他兼容的 XSLT 3 实现中,根据需要生成新的样式表并使用 transform 函数 https://www.w3.org/TR/xpath-functions/#func-transform 执行它。您需要使用不同的命名空间在 XSLT 中生成样式表代码,您可以为 XSLT 命名空间添加别名:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:axsl="http://www.w3.org/1999/XSL/Transform-Alias"
exclude-result-prefixes="#all"
version="3.0">

<xsl:param name="pattern1" as="xs:string" select="'foo/bar'"/>

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>

<xsl:variable name="stylesheet">
<axsl:stylesheet version="3.0">
<axsl:mode on-no-match="shallow-copy"/>
<axsl:template match="{$pattern1}"/>
</axsl:stylesheet>
</xsl:variable>

<xsl:template match="/">
<xsl:sequence select="transform(
map {
'source-node' : .,
'stylesheet-node' : $stylesheet
}
)?output"/>
</xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/jyH9rMM/2

关于java - XSL : Pass string value to template match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52206556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com