#44279 [Bgs]: transformToXml does not properly close tags when stylesheet output is xml
| From: | phpbugs at xmlnode dot com | Date: | Thu, 28 Feb 2008 07:49:57 +0000 |
| Subject: | #44279 [Bgs]: transformToXml does not properly close tags when stylesheet output is xml | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-122769@lists.php.net to get a copy of this message | ||
ID: 44279
User updated by: phpbugs at xmlnode dot com
Reported By: phpbugs at xmlnode dot com
Status: Bogus
Bug Type: XSLT related
Operating System: Debian 2.6 stable
PHP Version: 5.2.5
New Comment:
Ugh. you're right. Another developer had an output handler that does a
bunch of decently important stuff, but in there was a buzz-killing
saveHTML(). Please consider this redacted - "the office" - season 2 :)
Previous Comments:
------------------------------------------------------------------------
[2008-02-28 06:13:04] chregu@php.net
If I run your code on a commandline PHP it does work correctly:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 //EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
<html
xml:lang="en"><head><title>whatever</title></head><body><br/><hr/><img
src="somesource"/></body></html>
I assume, the conversion from <br/> to <br> happens somewhere else in
your case, either the browser or apache. try something like wget to
get the raw source of your output.
My experience with the xslt extension also tells me, that this can0t
be PHPs fault, I never saw something like that. Also your experience
with the difference between saveXML and save tells me, that the
conversion happens somewhere else.
------------------------------------------------------------------------
[2008-02-28 01:06:36] phpbugs at xmlnode dot com
Description:
------------
It's pretty basic, I have an xsl stylesheet with an output method of
xml and an encoding of iso-8859-1 (which doesn't matter) using xhtml11
as the doctype, but the same is seen for other xhtml doctypes. When I
call transformToXML I get tags like this:
<hr> <br> <link ...>
when I call transformToURI() I get the proper tags <hr/> <br /> <link
/>, etc. If I call transformToDoc() and then use saveXML() I still
see the open tags <hr> <br> <link ...>, but if I call transformToDoc
and then save() the tags are correct. I would have thought it was a
browser-specific issue, but I've tried every browser available to me
(7 total across multiple platforms) My guess is that internally save
and transformToURI; which work, call the same method, but that
transformToXML and saveXML which don't work call the same somewhat
broken method.
Reproduce code:
---------------
stylesheet (condensed):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" media-type="text/html"
doctype-public="-//W3C//DTD XHTML 1.1 //EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd"
omit-xml-declaration="yes" encoding="iso-8859-1"/>
<xsl:template match="/"><html
xml:lang="en"> <head><title>whatever</title></head><body><br/><hr/><img
src='somesource'/></body></html></xsl:template>
$xml = new DOMDocument('1.0');
$xml->loadXML('<PAGE/>');
$xsl = new DOMDocument('1.0);
$xsl->load(<path to stylesheet>); // you'll need to set this
$proc = new XsltProcessor();
$proc->importStylesheet($xsl);
echo $proc->transformToDoc($xml);
Expected result:
----------------
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 //EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
<html
xml:lang="en"><head><title>whatever</title></head><body><br/><hr/><img
src="somesource"/></body></html>
I should note that this is the output from either transformToURI($xml,
<path>) or $dom = transformToDOC($xml); $dom->save(<path>); In fact if
you want you can just change $dom->save(path) to $dom->saveXML() and
you'll get completely different results.
Actual result:
--------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 //EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
<?xml version="1.0" encoding="iso-8859-1"?><html
xml:lang="en">
<head><title>whatever</title></head>
<body>
<br><hr>
<img src="somesource">
</body>
</html>
You'll notice that not only are the tags not closed the XML
declaration is in a different spot.
I assume you'll ask, because I know I would, but I'm running the
absolute latest libxml2 (2.6.31) and libxsl (1.1.22), compiled
everything last night (2/26/2008) saw the behavior before upgrading
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=44279&edit=1