Обработка пользовательского пространства имен XML в XSL - PullRequest
3 голосов
/ 27 июня 2011

Я использую php класс XSLTProcessor для генерации HTML из xsl. В xsl мне бы хотелось, чтобы все мои пользовательские элементы пространства имен обрабатывались моим собственным классом процессора.

Так, например:

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

Это должно вызвать метод renderElement экземпляра моего пользовательского класса процессора.

Я знаю, что могу включить вызов функций php с помощью функции registerPHPFunctions . Однако кажется, что это только поддерживает вызов статических методов.

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Да, XSLTProcessor::registerPHPFunctions поддерживает только статические вызовы функций классов. Однако вы можете использовать эти статические вызовы, чтобы предоставить factory или экземпляр реестра для предоставления реальных объектов. В вашем случае, вероятно, на основе имени элемента.

Существующий код, где это делается, можно найти в PIWI - PHP Transformation Framework .

0 голосов
/ 27 июня 2011

Хорошо, у меня есть скрипт, использующий это, может быть, он будет вам полезен

    // 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
    }

Если вы хотите попробовать прочитать на португальском языке, здесь много другой информации для обработки XML пространства имен с использованием PHPс SimpleXMLFormt: http://www.plugandpray.com.br/posts/manipulando_xml_com_namespace_em_php

О SimpleXMLFormat http://php.net/manual/en/book.simplexml.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...