我的XSL无法使用参数
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="reportname" />
<xsl:param name="quarter" />
<xsl:param name="menteename" />
<xsl:template match="AllReports" >
<xsl:for-each select="./Report[@Name=$reportname]" >
<table border="0" class="dottedlines" cellpadding="2" cellspacing="0">
<xsl:for-each select="Record[@Period=$quarter] and ($menteename)] >
<tr>
<xsl:for-each select="Entry">
<td><xsl:value-of select="." disable-output-escaping="yes"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我的XSL使用硬编码值
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="reportname" />
<xsl:param name="quarter" />
<xsl:param name="menteename" />
<xsl:template match="AllReports" >
<xsl:for-each select="./Report[@Name=$reportname]" >
<table border="0" class="dottedlines" cellpadding="2" cellspacing="0">
<xsl:for-each select="Record[@Period=$quarter] and (Entry= 'Dhirde, Govinda' or Entry= 'Vaze, Kedar')] >
<tr>
<xsl:for-each select="Entry">
<td><xsl:value-of select="." disable-output-escaping="yes"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我正在传递变量$ menteename =“Entry ='Dhirde,Govinda'或Entry ='Vaze,Kedar'”的值。但硬编码的东西不是参数之一。我发现XSL解析存在一些问题,即它在参数值中读取标记。这是否会导致问题。我怎样才能做到这一点?
答案 0 :(得分:0)
我们确实需要知道哪种类型的参数值以及传递给样式表的值,特别是当您的问题被标记为xslt-2.0
时,您应该可以传递一个纯字符串值但也是一系列字符串。
假设您传入一系列字符串'Dhirde, Govinda', 'Vaze, Kedar'
,您只需测试
Entry = $menteename
在你的谓词中。
如果传入包含多个名称的普通字符串,那么字符串当然需要拆分为单个值。由于值已经包含逗号,因此需要不同的分隔符,例如传递的字符串值为'Dhirde, Govinda|Vaze, Kedar'
,您可以使用
Entry = tokenize($menteename, '\|')
在你的谓词中。
假设你使用XSLT 1.0并且不能使用或不想使用扩展函数来拆分参数的字符串值,你可以使用像
这样的检查contains(concat('|', $menteename, '|'), concat('|', Entry, '|'))
这假设Entry
元素包含单个值Vaze, Kedar
,并且您传入bar
个分隔的名称列表,例如'Dhirde, Govinda|Vaze, Kedar'
作为参数值,然后检查
contains('|Dhirde, Govinda|Vaze, Kedar|', '|Vaze, Kedar|')
答案 1 :(得分:0)
变量包含值,而不是表达式。您不能将表达式lilke(@x = 3)替换为值为字符串“@x = 3”的变量。要做这种事情,你需要一个扩展来评估作为字符串提供的XPath表达式,例如saxon:evaluate(),或者在XSLT 3.0 xsl:evaluate中。