我有这段代码,但不起作用。
我希望迭代p
元素下面的所有body
元素,并查找名为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')]">
我做错了什么?
答案 0 :(得分:3)
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。