【发布时间】:2013-10-11 23:38:03
【问题描述】:
我正在尝试使用 PHP 中的 XSL 转换器生成有效的 HTML 5 输出,但我在这样做时遇到了困难。这是示例 PHP 代码:
<?php
$xml_source = '<?xml version="1.0" encoding="utf-8"?><content/>';
$xsl_source = <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="utf-8" />
<xsl:template match="content">
<xsl:text disable-output-escaping="yes"><!DOCTYPE html> </xsl:text>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<body>
<div style="color: green"></div>
This text should be black
<br/>
This black text is on next line
</body>
</html>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
EOD;
$xml = new DomDocument;
$xml->LoadXML($xml_source);
$xsl = new DomDocument;
$xsl->loadXML($xsl_source);
$xslt = new XSLTProcessor;
$xslt->importStyleSheet( $xsl );
echo $xslt->transformToXML( $xml );
当<xsl:output method="html" 生成时
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<body>
<div style="color: green"></div>
This text should be black
<br></br>
This black text is on next line
</body>
</html>
<br></br> 被解释为两个中断
当<xsl:output method="xml" 生成时
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<body>
<div style="color: green" />
This text should be black
<br />
This black text is on next line
</body>
</html>
<div /> 是自动关闭的,它被解释为只是打开 <div> 并且文本是绿色的。
我需要您对如何进行的建议。 PHP XSL 处理器中是否有一些未记录的选项可以仅使某些标签自动关闭。是否有内置 XSLT 处理器的替代方案?
【问题讨论】:
-
解决此问题的一种可能方法是将输出保持为“xml”,并在假设有结束标签的空标签中添加
&#160;或<xsl:comment/>。像这样<div style="color: green" ><xsl:comment/></div>
标签: php xml html xslt xslt-1.0