ID: 16193
Comment by: andres_chacin at cantv dot net
Reported By: kdesormeaux at atre dot net
Status: Closed
Bug Type: XSLT related
Operating System: windows2000/linux...
PHP Version: 4.3.0-dev
New Comment:
Hello everybody!
I think I have found a way to solve this Error 'XML parser error 4: not
well-formed (invalid token)'.
Test this method.
function
XSL_transformation($XMLFile,$XSLFile,$ResultFile,$xsl_params){
$Str = '';
$xp = xslt_create() or trigger_error('Could not create XSLT
process.', E_USER_ERROR);
xslt_set_encoding($xp, 'ISO-8859-1');
// read the files into memory
$xsl_string = join('', file($XSLFile));
$xml_string = join('', file($XMLFile));
// set the argument buffer
$arg_buffer = array('/xml' => $xml_string, '/xsl' => $xsl_string);
// process the two files to get the desired output
if (($Str = xslt_process($xp, 'arg:/xml', 'arg:/xsl', NULL,
$arg_buffer, $xsl_params))){
//Saves transformation result into '$ResultFile'
$fp = fopen($ResultFile,"w+");
fwrite($fp,$Str);
fclose($fp);
return true;
}
return false;
}
Previous Comments:
------------------------------------------------------------------------
[2004-03-13 18:36:42] southen-antispam- at pipeline dot com
Ok well I am getting something like this with the following code, and
I'm running Redhat9 with PHP 4.3.4. My error message is
Warning: Sablotron error on line 1: XML parser error 3: no element
found in
/home/httpd/vhosts/noctambus.com/httpdocs/reviews/xml/standardbrowser.php
on line 85
My code is:
/* transform method */
function transform() {
$arguments = array(
'/_xml' => $this->xml,
'/_xsl' => $this->xsl
);
$this->setOutput(
xslt_process($this->processor, 'arg:/_xml', 'arg:/_xsl', NULL,
$arguments)
);
$this->setError($err);
}
Can someone suggest a workaround?
Thanks!
------------------------------------------------------------------------
[2003-05-24 08:23:47] drm-nospam- at -nospam-melp-dot-nl dot nospam
[PHP 4.2.2, Windows XP]
Here are my findings with the same bugs:
The documentation on xslt_set_base () states that you must provide an
file:// prefix with setting the base. It seems that you should provide
the same prefix when passing files to xslt_process ().
The following works fine with me, using the "Very important" example
from above with local xml and xslt files, named 'sample.xml' and
'sample.xsl' respectively:
<?php
# create XSLT processor
$xsltProcessor = xslt_create ();
# generate filebase from working directory
$fileBase = 'file://' . getcwd () . '/';
# process the 'sample.xml' and 'sample.xsl' files
$result = xslt_process (
$xsltProcessor,
$fileBase . 'sample.xml',
$fileBase . 'sample.xsl'
);
# print the result
if ( $result ) {
echo 'Success ...';
echo '<pre>', "\n";
echo htmlentities ( $result );
echo '</pre>';
} else {
echo 'Fail due to error: ' . xslt_error($xh);
}
# free the processor resource
xslt_free ( $xsltProcessor );
?>
Alternatively, you can use the xslt_set_base function to provide the
processor with an explicit working directory:
<?php
# create XSLT processor
$xsltProcessor = xslt_create ();
# generate filebase from working directory
$fileBase = 'file://' . getcwd () . '/';
# point xslt process base to working directory
xslt_set_base ( $xsltProcessor, $fileBase );
# process the 'sample.xml' and 'sample.xsl' files
$result = xslt_process (
$xsltProcessor,
'sample.xml',
'sample.xsl'
);
# print the result
if ( $result ) {
echo 'Success ...';
echo '<pre>', "\n";
echo htmlentities ( $result );
echo '</pre>';
} else {
echo 'Fail due to error: ' . xslt_error($xh);
}
# free the processor resource
xslt_free ( $xsltProcessor );
?>
---
Hope some people will profit from this, at least i found a working
solution :)
------------------------------------------------------------------------
[2002-06-28 22:15:34] [EMAIL PROTECTED]
This should be fixed now as the related files were reverted
back to the 4.2.1 level.
------------------------------------------------------------------------
[2002-06-28 21:47:18] [EMAIL PROTECTED]
this isn't critical.
------------------------------------------------------------------------
[2002-06-24 13:04:34] [EMAIL PROTECTED]
Changed title
Somehow two different bugs got into here... Let's name it after the
real bug... (or should i open a new one)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/16193
--
Edit this bug report at http://bugs.php.net/?id=16193&edit=1