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>
2 つのブレークに解釈されます
<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 プロセッサに代わるものはありますか?