EXSLT 和 xsltproc 出现错误

发布于 2024-11-03 10:01:56 字数 814 浏览 4 评论 0原文

我有一个 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 中使用了 this: 。这导致以下错误:

xmlXPathCompOpEval: function test not found
XPath error : Unregistered function
xmlXPathCompiledEval: 3 objects left on the stack.

知道我在这里做错了什么,我严格按照说明进行操作

http://www.exslt.org/

谢谢,

I have an XSL file which works like a charm, at least, until I wanted to use regular expressions from EXSLT, what I did:
added :

  xmlns:regexp="http://exslt.org/regular-expressions"
  extension-element-prefixes="regexp"

and used this:

<xsl:choose>
    <xsl:when test="regexp:test(
                       Location/Politic/@Country,
                       'Espa.a',
                       'i'
                    )"
             >ES</xsl:when>
</xsl:choose>

somewhere in my XSL. this lead to the following error:

xmlXPathCompOpEval: function test not found
XPath error : Unregistered function
xmlXPathCompiledEval: 3 objects left on the stack.

any idea what am I doing wrong in here, I strictly followed the instructions over

http://www.exslt.org/

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你又不是我 2024-11-10 10:01:56

如果您需要 EXSLT regexp 函数,则必须使用用 python 编写的 4Suite。
Saxon 不知道这个扩展,但它是 XSLT 2.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

If you need EXSLT regexp functions, you have to use 4Suite written in python.
Saxon doesn't know this extension, but it is XSLT 2.0 processor, so you can use fn:matches instead of regexp:test. See http://www.w3.org/TR/xslt20/ .

Another way is to define your own extension function.

In Saxon:

<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>

In 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文