Отправка коллекции узлов в XSL из функции PHP - PullRequest
1 голос
/ 19 сентября 2011

Я использую PHP XML и XSL для генерации документов. Если вы знакомы с реализацией PHP, вы можете знать, что функция XSL tokenize (string, pattern) недоступна. Я пытаюсь реализовать эту функцию в PHP, чтобы ее можно было вызывать из XSL, например:

<xsl:value-of select="php:function('tokenize','aaa bbb ccc',' ')[last()]"/>

, который должен выдавать 'ccc'

Проблема в том, что я не могу найти способ вернуть коллекцию узлов, состоящую из простых строк, в XSL. Когда я пытаюсь отправить DOMNodeList, я получаю сообщение об ошибке «Объект PHP не может быть преобразован в строку XPath». Приемы написания функций расширения XSL в PHP не описаны в руководстве по PHP. Могут ли некоторые гуру пролить свет на это?

Вот моя текущая работа. Я могу сделать следующее в XSL

<xsl:value-of select="php:function('tokenizeIntoXML',$stop_at_class,' ')/node()[last()]"/>

с этой функцией PHP

   function tokenizeIntoXML($string, $delimiter)
   {
       $ret = null;
       $toks =  explode($delimiter, $string);
       if(!empty($toks))
       {
            $xml = new DomDocument();
            $xml -> loadXML("<result/>");
            foreach($toks as $t)
            {
                $xml -> documentElement -> appendChild(new DOMText($t));
            }
            return $xml -> documentElement;
       }
       return $ret;
   }

1 Ответ

0 голосов
/ 14 августа 2012

False, если вы включили соответствующее пространство имен для exslt, вы на самом деле можете использовать токенизацию, как описано здесь .

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fn="http://exslt.org/strings"> <!-- here -->

    <xsl:output
        method="xml"
        omit-xml-declaration="yes"
        media-type="text/html"
        encoding="UTF-8"
        indent="yes"
    />


    <xsl:template match="/">
        <xsl:value-of select="fn:tokenize('a,b,c', ',')"/>
    </xsl:template>

</xsl:stylesheet>

Проверено на win764 XAMPP (apache2.2 php5.3)

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