我有这个代码,它不起作用。
我想遍历body
元素下面的所有p
元素,并查找一个名为object
的元素。然后使用match()
函数在属性节点数据中查找某个模式。
<xsl:template match="/xhtml:html/xhtml:body//xhtml:p">
<xsl:for-each select="xhtml:object[matches(@data,'*mov$')]">
<halloMovie><xsl:value-of select="@data"/></halloMovie>
</xsl:for-each>
</xsl:template>
使用matches()执行时出现错误消息
[xslt]:致命错误!无法编译样式表原因:检查表达式"funcall(matches,[step("attribute",17),literal expr(v$)]"的类型时出错。
如果我将下面的行与有效的contains()
函数一起使用。
<xsl:for-each select="xhtml:object[contains(@data,'.mov')]">
我做错了什么?
matches
函数需要XPath 2.0(因此需要XSLT 2.0)或更高版本,XSLT 1.0中不支持正则表达式。
如果你只想检查值是否以".mov"结尾,你可以使用子字符串函数来完成
substring(@data, string-length(@data) - 3) = '.mov'
(XPath 1.0有starts-with
,但ends-with
需要2.0)。