【问题标题】:XSLT xmlXPathCompOpEval: function new not foundXSLT xmlXPathCompOpEval:未找到新函数
【发布时间】:2015-04-22 07:31:45
【问题描述】:

我正在尝试执行我的 xsl 文件并收到一个错误,提示未找到新功能。

执行我的 xsl 的命令:xsltproc GetRequestTransformation.xsl xsltTest.xml

每当我尝试在我的 Linux 机器上执行上述命令时,我都会收到以下错误:

compilation error: file GetRequestTransformation.xsl line 5 element stylesheet
xsl:version: only 1.0 features are supported
xmlXPathCompOpEval: function new not found
XPath error : Unregistered function
xmlXPathCompOpEval: parameter error
runtime error: file GetRequestTransformation.xsl line 15 element variable
Failed to evaluate the expression of variable 'currentDate'.

这是我的 XSLT 文件 GetRequestTransformation.xsl

    <?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0'
        xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
        xmlns:java="http://xml.apache.org/xslt/java" xmlns:SimpleDateFormat="java.text.SimpleDateFormat"
        xmlns:Date="java.util.Date" exclude-result-prefixes="java SimpleDateFormat Date">
        <xsl:template match="/">
                <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:max="http://www.ibm.com/maximo">
                    <soapenv:Header/>
                    <soapenv:Body>
                        <max:CreateWS_INCID_AFEC_TB>
                            <max:WS_INCID_AFEC_TBSet>
                                <max:DURACION>
                                    <xsl:variable name="affectedFinish" select='/tTroubleticket/alarms/tTroubleticketalarm/clearDate' />
                                    <xsl:variable name="affectedStart" select='/tTroubleticket/alarms/tTroubleticketalarm/activationDate' />
                                    <xsl:variable name="currentDate" select="SimpleDateFormat:format(SimpleDateFormat:new('yyyy-MM-dd HH:mm:ss'), Date:new() />
                                    <xsl:choose>
                                        <xsl:when test="$affectedFinish != null">
                                            <xsl:value-of select="$affectedFinish - $affectedStart" />
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:value-of select="$currentDate - $affectedStart" />
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </max:DURACION>
                            </max:WS_INCID_AFEC_TBSet>
                        </max:CreateWS_INCID_AFEC_TB>
                    </soapenv:Body>
                </soapenv:Envelope>
            </xsl:template>
</xsl:stylesheet>

映射XML文件xsltTest.xml

<tTroubleticket>
<alarms>
        <tTroubleticketalarm>
                <activationDate>2015-04-01 12:42:22.0</activationDate>
                <clearDate>null</clearDate>
        </tTroubleticketalarm>
    </alarms>
</tTroubleticket>

您能否尝试找出我的 xsl 文件的问题。在执行该命令之前我是否遗漏了什么?我该如何解决?

【问题讨论】:

    标签: java xml date xslt


    【解决方案1】:

    您尝试使用的 Java 扩展功能机制特定于 Xalan Java XSLT 处理器,并且不适用于 xsltproc(不是用 Java 编写的)。如果你想从命令行执行这个样式表,你需要下载 Xalan 并运行它的command line tool

    java -cp xalan.jar:serializer.jar org.apache.xalan.xslt.Process -XSL GetRequestTransformation.xsl -IN xsltTest.xml
    

    【讨论】:

      【解决方案2】:

      第 14 行,Date:new() 之后:关闭括号和引号:

      <xsl:variable name="currentDate" select="SimpleDateFormat:format(SimpleDateFormat:new('yyyy-MM-dd HH:mm:ss'), Date:new())" />
      

      编辑:

      伊恩·罗伯茨的眼睛比我的更锐利;我浏览了命令行部分,只专注于您的 XSLT 代码,假设它由用 Java 编写的处理器(即 Xalan 或 Saxon)运行。

      FWIW,您不需要使用 Java 来获取当前日期:libxslt 和 Xalan 都支持 EXSLT date:date()date:time() 扩展函数。 libxslt 还支持date:date-time()date:difference()

      【讨论】:

      • 您能告诉我为了配置 EXSLT 需要做什么吗?
      • 只要声明相关的命名空间并使用函数——见:exslt.org/date/index.html
      • 我需要在类路径中添加任何 jar 吗?
      • 我相信我应该下载您分享的上述链接中提供的 zip 文件。但不幸的是,这些文件在 GItHub 上不可用
      • 不,我刚才说的是它。 -- P.S. jarclasspath 是 Java 语言。这令人困惑。您实际上是否为此使用Java?正如 Ian 所提到的,xsltproc 不是 Java。它调用用 C 编写的 libxslt 处理器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2010-10-01
      • 2022-01-15
      • 2017-05-08
      • 1970-01-01
      相关资源
      最近更新 更多