我有一个XSL文件,至少在我想要使用EXSLT的正则表达式之前,它的工作就像一种魅力,我所做的是:
xmlns:regexp="http://exslt.org/regular-expressions"
extension-element-prefixes="regexp"并使用这一方法:
<xsl:choose>
<xsl:when test="regexp:test(
Location/Politic/@Country,
'Espa.a',
'i'
)"
>ES</xsl:when>
</xsl:choose>在我的XSL的某个地方。这将导致以下错误:
xmlXPathCompOpEval: function test not found
XPath error : Unregistered function
xmlXPathCompiledEval: 3 objects left on the stack.如果你知道我在这里做错了什么,我会严格按照指示
http://www.exslt.org/
谢谢,
发布于 2011-08-23 08:36:14
如果需要EXSLT函数,则必须使用用python编写的4 4Suite。Saxon不知道这个扩展,但是它是XSLT2.0处理器,所以您可以使用fn:matches而不是regexp:test。见http://www.w3.org/TR/xslt20/。
另一种方法是定义自己的扩展函数。
在撒克逊:
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:regexp="http://exslt.org/regular-expressions"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xsl:function name="regexp:test" as="xs:boolean">
<xsl:param name="regexp" as="xs:string"/>
<xsl:param name="str" as="xs:string"/>
<xsl:sequence select="fn:matches($regexp, $str)"/>
</xsl:function>
</xsl:stylesheet>在Xalan:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:regexp="http://exslt.org/regular-expressions"
xmlns:func="http://exslt.org/functions"
xmlns:java="http://xml.apache.org/xalan/java"
extension-element-prefixes="func java regexp"
>
<func:function name="regexp:test">
<xsl:param name="regexp"/>
<xsl:param name="str"/>
<xsl:variable name="testResult" select="java:matches($regexp, $str)"/>
<func:result select="$testResult"/>
</func:function>
</xsl:stylesheet>http://xml.apache.org/xalan-j/extensions.html
https://stackoverflow.com/questions/5782139
复制相似问题