php 编译 xml 模板(简易实现)

php 编译 xml 模板

代码

template_compile.php

<?php

// 自定义模板编译方法 compile, template_compile

/**
 * 编译模板
 * @param $template 模板
 * @param $data 模板数据
 * @return
 */
function template_compile($template, $data)
{
	eval(compile($template));
	return parse($data);
}

function compile($template)
{
	$evalExpr = '/<#=(.+?)>/';
	$expr = '/<#([\s\S]+?)>/';
  
	$template = preg_replace($evalExpr, "\"); \n  p( $1 ); \n  p(\"", $template);
	$template = preg_replace($expr, "\"); \n $1 \n  p(\"", $template);
	
	$template = 'p("' . $template . '");';

	$phpScript = <<<EOF
function parse(\$data){
	global \$output;
	\$output = "";

	function p(\$html){
		global \$output;
	\$output = \$output . htmlspecialchars(\$html);
	}

	$template

	return htmlspecialchars_decode(\$output);
};
EOF;
	
	return $phpScript;
}

使用方法:

模板

demo.xml

<hello.article>
	<# for($i=0; $i < count($data); $i++) { >
	<persion>
		<name><#=$i></name>
		<age><#=$data[$i]></age>
	</persion>
	<# } >
</hello.article>
调用
ob_start();
require __DIR__ . '/demo.xml';
$template =  ob_get_contents();
ob_end_clean();

$xml = template_compile($template, array('Yue', 'Jay'));
echo $xml;

打印结果:

<hello.article>
        <persion>
                <name>0</name>
                <age>Yue</age>
        </persion>
        <persion>
                <name>1</name>
                <age>Jay</age>
        </persion>
</hello.article>

Tip: 需要在使用的 php 脚本文件头部,引入template_compile.php

require __DIR__ . '/compile/template_compile.php';

至此,结束。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值