使用正则表达式模式检查 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
)。
我有这个代码,但它不起作用。
我想遍历 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
)。