在XSL中处理自定义XML命名空间

时间:2011-06-27 12:20:12

标签: php xslt

我正在使用php类XSLTProcessor从xsl生成HTML。在xsl中,我希望我的所有自定义命名空间元素都由我自己的处理器类处理。

例如:

<xsl:for-each select="doc/elements/*">
    <doc:renderElement element="." />
</xsl:for-each>

这应该调用我的自定义处理器类的实例的方法renderElement。

我知道我可以使用registerPHPFunctions函数启用调用php函数。但是,这似乎只支持调用静态方法。

2 个答案:

答案 0 :(得分:2)

是的,XSLTProcessor::registerPHPFunctions仅支持类的静态函数调用。但是,您可以使用这些静态调用来提供 factory 实例注册表来提供实际对象。在您的情况下可能基于元素名称。

可以在PIWI - PHP Transformation Framework

中找到完成此操作的现有代码

答案 1 :(得分:-1)

好吧,我有一个使用它的脚本,也许它会为你使用

    // Simple XML
    $xml = new SimpleXMLElement($data);
     // You need to set every namespace
    $xml->registerXPathNamespace('e', 'http://myxml.withalotofnamespaces.com/xml');
    foreach ($xml->xpath('//e:responseData/e:cityCodes') as $city) {
       // getting each city as an Array,  $city is a SimpleXMLElement
       // Work Here
    }

如果你想尝试使用葡萄牙语阅读,这里有很多关于使用PHP和SimpleXMLFormt处理命名空间XML的其他信息: http://www.plugandpray.com.br/posts/manipulando_xml_com_namespace_em_php

关于SimpleXMLFormat http://php.net/manual/en/book.simplexml.php