【问题标题】:Sending node collection to XSL from PHP function从 PHP 函数将节点集合发送到 XSL
【发布时间】:2011-09-19 19:55:48
【问题描述】:

我正在使用 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 字符串”错误。 PHP 手册中没有记录在 PHP 中编写 XSL 扩展函数的技术。那里的一些大师可以对此有所了解吗?

这是我目前的工作。我可以在 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;
   }

【问题讨论】:

    标签: php xml xslt


    【解决方案1】:

    错,如果您为 exslt 包含相应的命名空间,您实际上可以按照here 的描述使用标记化。

    <?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)上测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 2022-01-03
      • 1970-01-01
      • 2020-06-24
      • 2011-02-28
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多