PHP: XSLTProcessor->transformToXML() - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

XSLT XSLTProcessor->transformToURI()

Last updated: Sat, 27 Jan 2007

view this page in

# XSLTProcessor->transformToXML()

(no version information, might be only in CVS)

XSLTProcessor->transformToXML() -- Transform to XML

## Описание

class XSLTProcessor {
string transformToXML ( DOMDocument doc )
}

Transforms the source node to a string applying the stylesheet given by the XSLTProcessor->importStylesheet() method.

## Список параметров

`doc`

  The transformed document.

## Возвращаемые значения

The result of the transformation as a string or `FALSE` on error.

## Примеры

Пример 1. Transforming to a string

`<?php
// Load the XML source
$xml = new DOMDocument;
$xml->load('collection.xml');
$xsl = new DOMDocument;
$xsl->load('collection.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
echo $proc->transformToXML($xml);
?>`

Результат выполнения данного примера:

    Hey! Welcome to Nicolas Eliaszewicz's sweet CD collection!

    <h1>Fight for your mind</h1><h2>by Ben Harper - 1995</h2><hr>
    <h1>Electric Ladyland</h1><h2>by Jimi Hendrix - 1997</h2><hr>

## Смотрите также

XSLTProcessor->transformToDoc()
XSLTProcessor->transformToURI()

add a note User Contributed Notes
XSLTProcessor->transformToXML()
Thomas Praxl
22-Jan-2007 01:36
`I noticed an incompatibility between libxslt (php4) and the transformation through XSLTProcessor.
Php5 and the XSLTProcessor seem to add implicit CDATA-Section-Elements.
If you have an xslt like
<script type="text/javascript">
foo('<xsl:value-of select="bar" />');
</script>
It will result in
<script type="text/javascript"><![CDATA[
foo('xpath-result-of-bar');
]]></script>
(at least for output method="xml" in order to produce strict xhtml with xslt1)
That brings up an error (at least) in Firefox 1.5 as it is no valid javascript.
It should look like that:
<script type="text/javascript">//<![CDATA[
foo('xpath-result-of-bar');
]]></script>
As the CDATA-Section is implicit, I was not able to disable the output or to put a '//' before it.
I tried everything about xsl:text disable-output-escaping="yes"
I also tried to disable implicit adding of CDATA with <output cdata-section-elements="" />
(I thought that would exclude script-tags. It didn't).
The solution:
<xsl:text disable-output-escaping="yes">&lt;script type="text/javascript"&gt;
foo('</xsl:text><xsl:value-of select="bar" /><xsl:text disable-output-escaping="yes">');
&lt;/script&gt;</xsl:text>
Simple, but it took me a while.`
werner@mollentze
15-Aug-2006 01:53
`The transformToXML function can produce valid XHTML output - it honours the <xsl:output> element's attributes, which defines the format of the output document.
For instance, if you want valid XHTML 1.0 Strict output, you can provide the following attribute values for the <xsl:output> element in your XSL stylesheet:
<xsl:output
method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />`
lsoethout at hotmail dot com
19-Feb-2006 02:35
`The function transformToXML has a problem with the meta content type tag. It outputs it like this:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
which is not correct X(HT)ML, because it closes with '>' instead of with '/>'.
A way to get the output correct is to use instead of transformToXML first transformToDoc anf then saveHTML:
$domTranObj = $xslProcessor->transformToDoc($domXmlObj);
$domHtmlText = $domTranObj->saveHTML();`
jlipps at mac
06-Jan-2005 08:05
`transformToXML, if you have registered PHP functions previously, does indeed attempt to execute these functions when it finds them in a php:function() pseudo-XSL function. It even finds static functions within classes, for instance:
<xsl:value-of select="php:function('MyClass::MyFunction', string(@attr), string(.))" disable-output-escaping="yes"/>
However, in this situation transformToXML does not try to execute "MyClass::MyFunction()". Instead, it executes "myclass:myfunction()". In PHP, since classes and functions are (I think) case-insensitive, this causes no problems.
A problem arises when you are combining these features with the __autoload() feature. So, say I have MyClass.php which contains the MyFunction definition. Generally, if I call MyClass::MyFunction, PHP will pass "MyClass" to __autoload(), and __autoload() will open up "MyClass.php".
What we have just seen, however, means that transformToXML will pass "myclass" to __autoload(), not "MyClass", with the consequence that PHP will try to open "myclass.php", which doesn't exist, instead of "MyClass.php", which does. On case-insensitive operating systems, this is not significant, but on my RedHat server, it is--PHP will give a file not found error.
The only solution I have found is to edit the __autoload() function to look for class names which are used in my XSL files, and manually change them to the correct casing.
Another solution, obviously, is to use all-lowercase class and file names.`
add a note
XSLT XSLTProcessor->transformToURI()

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST