使用正则表达式模式检查XML元素的属性值

时间:2015-02-20 09:45:37

标签: xpath xslt-1.0

我有这段代码,但不起作用。

我希望迭代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')]">

我做错了什么?

1 个答案:

答案 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。