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



我有这个代码,它不起作用。

我想遍历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)。

相关内容

  • 没有找到相关文章

最新更新