2016-09-06 57 views
0

正如在question中所提到的,我試圖使用Perl和libXSLT轉換我的輸入xml文檔。但是,當我嘗試在OS X上運行相同的Perl腳本時,我的xsl文件中的下列內容幾乎不包含以下內容:exsl:date-year in OS X

我收到以下錯誤。

xmlXPathCompOpEval: function year not found 
Unregistered function 
xmlXPathCompiledEval: evaluation failed 
runtime error: file trans.xsl line 24 element value-of 
XPath evaluation returned no result. 

我的XSLT文件頭有以下

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xalan="http://xml.apache.org/xslt" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:exsl="http://exslt.org/common" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="exsl"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" media-type="text/xml"/> 

運行Perl -v取我下面

This is perl, v5.8.8 built for darwin-thread-multi-2level Copyright 1987-2006, Larry Wall....

和運行uname -a取我下面

Darwin machine-maci 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64

爲什麼會出現此錯誤?我認爲OS X Vendor已經對他們的libXSLT進行了exsl擴展。是不是支持exsl擴展?

UPDATE

我調整我的例子一點點,我得到的輸出作爲賣方: - 通過的libxslt下面的評論的建議。

+0

如果您通過命令行或Perl運行libxslt,則有關Safari的鏈接無關緊要。無論如何,我無法重現您的問題。作爲''的結果,你會得到什麼? –

+0

我嘗試使用'exsl:document'(下面根據您的建議使用'system-property')的行中出現以下錯誤 '運行時錯誤:文件trans.xsl行30元素文檔 xsltApplySequenceConstructor:failed找到擴展文件' – Recker

+0

我不記得推薦你在這個測試中包含'exsl:document'(或其他任何東西)。無論如何,我建議你編輯你的問題,並提供**完整的**,一步一步的指導如何重現你的問題 - 請參閱:[mcve]。 –

回答

0

你必須申報日期作爲擴展元素太:

extension-element-prefixes="exsl date" 

使用時的libxslt您所聲明的命名空間xalan的可能不會是必要的。否則,可能必須將其添加到擴展元素前綴中。

+0

即使將日期添加到'extension-element-prefixes',我仍然會得到相同的錯誤。 :( – Recker

+0

Hm libxslt doc聲明「它也實現了大部分處理器可移植擴展函數的EXSLT集合」,在exslt頁面上libxslt被列爲date:year的實現者......順便說一句,你可以編寫'' - 也許最好按照邁克爾。hor257k的建議發佈一個完整(最小)的例子 –

+0

我實際上調整了我的例子,我得到了他的建議輸出。請看我最新的評論。 – Recker