2012-09-12 69 views
3

我需要用PHP自帶的標籤和函數來擴展XSLT處理器。我發現了一些API,但這些API仍然不是我所需要的。PHP和XSLT:擴展處理器

1)http://php.net/manual/ru/book.xsl.php - 非常簡單的API,但我只能擴展函數(registerPHPFunctions),而不是標籤。

2)http://www.php.net/manual/en/ref.xslt.php - 很好很簡單,我可以擴展我需要的任何東西(xslt_set_sax_handlers),但是,在這裏我們去了 - 另一個問題。簡介(http://www.php.net/manual/en/intro.xslt.php)說:「此擴展已被移至»PECL存儲庫,並不再與PHP 5.0.0以上版本捆綁在一起。」 。好的,我正在導航到pecl.php.net - >搜索包 - > XSLT - >沒有找到結果 - > o_O

所以,看起來好的API已被棄用,並且糟糕的API不能滿足我需要。你可以推薦幾個傢伙?我需要一個PHP XSLT處理器,可以擴展或覆蓋所有可以像上面的「2)」那樣擴展或重載的內容。謝謝!

+0

如果你說你想達成什麼效果會更好。要添加擴展元素XSLT,我走了,但到底爲什麼? – barefootliam

+0

是的,我願意聽取你的功能需求也。 PHP有相當多的漂亮的XML解析功能,以補充一般的SAX/DOM/XSL功能。你可能會發現,你需要的是已經存在的,除非您的解決方案絕對必須是XSL。 –

+0

嘿傢伙。我正在編寫我的網站引擎的新版本。引擎的本質 - 是XSLT處理器+標籤/函數擴展+透明數據綁定(如MySQL)。所以,我需要一種方法來寫一些XML標籤定製的PHP處理程序。目前我使用regexp替換來實現自定義的XML標記行爲,但它有一組問題。例如 - 嵌套結構處理。 –

回答

0

PHP使用libxslt作爲其默認處理器,libexslt作爲其擴展處理器。下面是API文檔:

此外,libxslt已經支持的eval extension,它可以爲你的目的。

還有的還內置了可用的宏通過xsl:processing-instruction其匹配PHP的速記符:

registerPHPFunctions方法。

的變換可以通過一個XPath表達式中一個自定義的命名空間的參數的函數:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:js="urn:livescript" 
    extension-element-prefixes="js" 
> 

    <xsl:variable name="source" select="//"/> 

    <xsl:template match="json"> 
    <xsl:value-of select="livescript:JSON($source)"/> 
    </xsl:template> 
</xsl:stylesheet> 

功能鏈接到其計算中的XPath結果,並通過使用一個回調返回結果的外部轉化。

參考