genkgo / xsl
此包的最新版本(1.4.0)没有可用的许可证信息。
PHP中的XSL 2.0转换器
1.4.0
2024-08-22 14:40 UTC
Requires
- php: ~8.2.0 || ~8.3.0
- ext-dom: *
- ext-intl: *
- ext-json: *
- ext-libxml: *
- ext-xsl: *
- psr/simple-cache: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9
- dev-master
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 1.0.0-beta1
- 1.0.0-alpha11
- 1.0.0-alpha10
- 1.0.0-alpha9
- 1.0.0-alpha8
- 1.0.0-alpha7
- 1.0.0-alpha6
- 1.0.0-alpha5
- 1.0.0-alpha4
- 1.0.0-alpha3
- 1.0.0-alpha2
- 1.0.0-alpha1
- 0.6.11
- 0.6.10
- 0.6.9
- 0.6.8
- 0.6.7
- 0.6.6
- 0.6.5
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.21
- 0.5.20
- 0.5.19
- 0.5.18
- 0.5.17
- 0.5.16
- 0.5.15
- 0.5.14
- 0.5.13
- 0.5.12
- 0.5.11
- 0.5.10
- 0.5.9
- 0.5.8
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.0
- 0.3.1
- 0.3.0
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.0
- dev-php_82
- dev-support_8.2
- dev-include_import
This package is auto-updated.
Last update: 2024-09-22 14:55:58 UTC
README
PHP中的XSL 2.0转换器。
安装
需要支持的PHP版本。可以通过Composer以 genkgo/xsl 的形式安装和自动加载。
质量
在命令行中运行单元测试,请输入 ./vendor/bin/phpunit -c phpunit.xml
。此库试图遵守 PSR-1、PSR-2 和 PSR-4。如果您注意到遵守疏忽,请通过拉取请求发送补丁。
入门指南
将 XSLTProcessor
替换为 Genkgo\Xsl\XsltProcessor
,将 version="1.0"
中的 version="2.0"
进行更改,您就完成了!
<?php use Genkgo\Xsl\XsltProcessor; use Genkgo\Xsl\Cache\NullCache; $xslDoc = new DOMDocument(); $xslDoc->load('Stubs/collection.xsl'); $xmlDoc = new DOMDocument(); $xmlDoc->load('Stubs/collection.xml'); $transpiler = new XsltProcessor(new NullCache()); $transpiler->importStylesheet($xslDoc); echo $transpiler->transformToXML($xmlDoc);
创建自己的扩展
您还可以注册自己的扩展。只需实现 XmlNamespaceInterface
,您就可以使用自己的元素转换和xpath函数了。请参阅下面的示例和 集成测试 来了解其工作原理。
<?php // use omitted for readability class MyExtension implements XmlNamespaceInterface { const URI = 'https://github.com/genkgo/xsl/tree/master/tests/Stubs/Extension/MyExtension'; public function register(TransformerCollection $transformers, FunctionCollection $functions) { $functions->set( self::URI, new class extends AbstractLazyFunctionMap { public function newFunctionList(): array { return [ 'hello-world' => ['newStringFunction', MyExtension::class], ]; } } ); } public static function helloWorld(Arguments $arguments) { return 'Hello World was called and received ' . count($arguments->unpack()) . ' arguments!'; } } $factory = new ProcessorFactory(new NullCache(), [new MyExtension()]); $processor = $factory->newProcessor();
然后在您的样式表中调用该函数。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="https://github.com/genkgo/xsl/tree/master/tests/Stubs/Extension/MyExtension"> <xsl:output omit-xml-declaration="yes" /> <xsl:template match="/"> <xsl:value-of select="my:hello-world(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)" /> </xsl:template> </xsl:stylesheet>
将产生: Hello World 被调用并接收了 20 个参数!
。
缓存:转换一次
根据您的样式表的复杂性,转换过程可能会减慢文档的处理速度。因此,您可能希望缓存结果样式表。通过在 composer.json 中添加 psr/simple-cache
,您将添加启用缓存的可能性。请参阅下面的示例,或查看 集成测试 来了解其工作原理。
<?php use Genkgo\Xsl\Cache\ArrayCache; use Genkgo\Xsl\ProcessorFactory; $factory = new ProcessorFactory(new ArrayCache()); $processor = $factory->newProcessor();
贡献
- 发现了一个错误?请先尝试自己解决,然后提交一个拉取请求。如果您无法修复它,至少给出一个清晰的错误描述。我们将在有时间时查看。
- 想要添加功能吗?提交一个拉取请求,看看会发生什么。您也可以提交缺少功能的错误报告,我们可以讨论如何实现它。