要求是将数据xml文件转换为html模板,然后使用该模板生成实际页面,嵌入到电子邮件中。
那么让我们看下面的例子:
XML 数据文件 (test.xml):
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<url><![CDATA[http://www.example.net/testurl/{{value1}}?{{value2}}&{{value3}}]]></url>
XSLT 文件 (test.xslt):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" version="1.0"/>
<xsl:template match="/">
<html>
<head>
</head>
<body>
<a>
<xsl:attribute name="href">
<xsl:value-of select="/url" />
</xsl:attribute>
Click
</a>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
服务器脚本 (test.php)
<?php
$xslDoc = new DOMDocument();
$xslDoc->load("test.xslt");
$xmlDoc = new DOMDocument();
$xmlDoc->load("test.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>
当上面的 .php 文件执行时,结果是
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body><a href="http://www.example.net/testurl/%7B%7Bvalue1%7D%7D?%7B%7Bvalue2%7D%7D&%7B%7Bvalue3%7D%7D">
Click
</a></body>
</html>
请注意,该href
属性已编码,这与我们现有的填充占位符(即{{value1}}
等)的代码不兼容。
如何避免编码以便我们现有的代码可以工作?