Filed under: 开发编程 |
Posted on April 10th, 2007 by 李 方进
最近一直在研究php下的xml+xslt,我固执的认为这种结合生成的xhtml页面是能最符合w3c标准的。
数据层采用xml,界面层采用xslt,界面外观样式则采用css。按照这个模式,可以很轻松的进行工作分配,而且还能同时开展,省时省力。
本文简单的记录下我近期的一段研究成果——在xslt中调用php函数。
test.xsl
- <?xml version="1.0" encoding="utf-8" ?>
- <xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml"
- xmlns:php="http://php.net/xsl"
- xsl:extension-element-prefixes="php"><!-- 注意这里 -->
- <xsl:output
- method="xml"
- indent="yes"
- encoding="utf-8"
- omit-xml-declaration="yes"
- media-type="application/xhtml+xml"
- doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
- doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
- <xsl:template match="/">
- <xsl:value-of select="php:function('getadd','1','2')" /><!-- 1,2可以改变为任意数字 -->
- </xsl:template>
- </xsl:stylesheet>
test.php
- <?php
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Cache-Control: no-cache, must-revalidate");
- header("Pragma: no-cache");
- header('Content-Type: text/xml; charset=UTF-8');
- $xmlfile="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
- $xmlfile.="<root></root>";
- echo parseTemplate("test",$xmlfile);
- //xml+xsl转换函数
- function parseTemplate($xslfile,$xmlfile,$xmlloadtype=1){
- $xsl = new DOMDocument;
- $xsl->load($xslfile.".xsl");
- $xml = new DOMDocument;
- switch ($xmlloadtype){
- case 0:$xml->load($xmlfile);break;
- case 1:$xml->loadxml($xmlfile);break;
- }
- $processor = new xsltprocessor;
- $processor->registerPHPFunctions();//这句很重要
- $processor->importStyleSheet($xsl);
- return $processor->transformToXML($xml);
- }
- //在test.xsl中调用到的php函数
- function getadd($i=0,$j=0){
- return $i+$j;
- }
- ?>
运行显示为3
如果想再深入的加以运用,只要沿着这个思路就可以了。:)
October 8th, 2007 at 12:15 am
你好,我觉得你用xsl跟js挺熟的,有个问题想请教
在一个xsl文件里,我取得某个节点的文本值后把它赋值给某个js函数,例如showmeg(”)
解释这个页面时 就出现这种情况
show(‘
节点文本值
‘)
节点文本值前后总有个换行符,就造成了js的语法错误,报语句没结束的错误信息,有什么办法可以解决这个问题呢
如果我用赋节点的属性值就没有这样的情况发生
October 8th, 2007 at 9:29 am
用xslt的string()函数把取得该节点的文本值处理一下