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

Check attribute value of XML element with a regular expression pattern

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

我想遍历 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] : Fatal Error! Could not compile stylesheet Cause: Error checking type of the expression '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 但你需要 2.0 才能 ends-with)。