XSLT -> XHTML: Inline PHP?
I'm trying to use XSLT to generate some XHMTL with inline PHP. I've run across a problem with generating inline PHP in attributes.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:output method="xml"
indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
omit-xml-declaration="yes" />
<xsl:template match="/">
<html lang="<?php echo getLang(); ?>" xml:lang="<?php echo getLang(); ?>">
<head>
<xsl:processing-instruction name="php">include_title();</xsl:processing-instruction>
(Much more code ...)
gives the following results:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:html="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php include_title();?>
(Much more code ...)
Take note that the "lang" and "xml:lang" attributes of the html element are empty! So clearly, this is the wrong way to process inline PHP.
So does anyone know how to change the xsl code to get the desired result shown below?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:html="http://www.w3.org/1999/xhtml" lang="<?php ec开发者_C百科ho getLang(); ?>" xml:lang="<?php echo getLang(); ?>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php include_title();?>
(Much more code ...)
Thanks, Kevin
<?php ... >
maybe using the same directive you used for this:
<xsl:processing-instruction name="php">include_title();</xsl:processing-instruction>
?
Do you have the option of using XSLT 2.0? If you do, you can use character maps. Like this:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml" version="2.0">
<xsl:output method="xml"
indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
omit-xml-declaration="yes"
use-character-maps="php"/>
<xsl:character-map name="php">
<xsl:output-character character="«" string="<"/>
<xsl:output-character character="»" string=">"/>
</xsl:character-map>
<xsl:template match="/">
<html lang="«?php echo getLang(); ?»" xml:lang="«?php echo getLang(); ?»">
<head>
<xsl:processing-instruction name="php">include_title();</xsl:processing-instruction>
</head>
</html>
</xsl:template>
</xsl:stylesheet>
if you just echo getLang(), is it actually returning anything? Your code and environment description is very limited, so it is hard to tell what is getting processed as PHP, and what is getting processed by an XSLT processor.
What happens if you replace <?php echo getLang();?>
with
<?php echo '<?php echo getLang();?>' ;?>
精彩评论