我正在使用php类XSLTProcessor从xsl生成HTML。在xsl中,我希望我的所有自定义命名空间元素都由我自己的处理器类处理。
例如:
<xsl:for-each select="doc/elements/*">
<doc:renderElement element="." />
</xsl:for-each>
这应该调用我的自定义处理器类的实例的方法renderElement。
我知道我可以使用registerPHPFunctions函数启用调用php函数。但是,这似乎只支持调用静态方法。
答案 0 :(得分:2)
是的,XSLTProcessor::registerPHPFunctions
仅支持类的静态函数调用。但是,您可以使用这些静态调用来提供 factory 或实例注册表来提供实际对象。在您的情况下可能基于元素名称。
答案 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