ID: 20177
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
-Status: Open
+Status: Assigned
Bug Type: XSLT related
Operating System: FreeBSD 4.7
PHP Version: 4.2.3
-Assigned To:
+Assigned To: msopacua
New Comment:
It's foremost a documentation problem. But we're looking into making it
more intuitive.
However - using a combination of a filepath and 'arg:/' is discouraged,
when the documents use external files. Relative paths are resolved
based on their file location. Using 'arg://' the file location is
currently undefined - this will be set to $_SERVER['PATH_TRANSLATED']
in future versions and documented properly.
The problem is, that this will not only apply to the xsl sheet in your
example, but also the XML file. This is a design limitation in the
Sablotron library, as xslt_set_base applies to the $xh resource, not a
specific file.
Previous Comments:
------------------------------------------------------------------------
[2002-10-30 15:08:52] [EMAIL PROTECTED]
Using Apache 2.0.43
------------------------------------------------------------------------
[2002-10-30 15:04:38] [EMAIL PROTECTED]
Sablot 0.96 and expat 1.95 installed
php-4.2.3:
./configure --enable-xslt --with-xslt-sablot --with-mysql --with-imap
--with-apxs2=/usr/local/apache2/bin/apxs --with-expat=/usr/local
--with-gettext --with-xml --with-mcrypt --enable-ftp --with-tsrm-pth
Problem: When using xslt_process and a arg:xxx, any xslt document()
calls will point to arg:(and what was in the document call)
Example xsl sheet code:
<xsl:apply-templates
select="document('/websites/xxx/htdocs/xml/messages.xml')//message[@id='nf-comp']/text[@xml:lang='en']"/>
would attempt to open:
arg:/websites/xxx/htdocs/xml/messages.xml
If I call the xsl sheet in from a file then it worked fine.
Origanal Code/Syntax Used:
<?
$xh = xslt_create();
// set xml file to be used with translation
$xmlfile=$GLOBALS["DOCUMENT_ROOT"]."/xml/product.xml";
// load dynamic xsl sheet to be used with translation
$xslstyle="http://".$GLOBALS["SERVER_NAME"]."/styles/product-detail.php?id=".$GLOBALS["HTTP_GET_VARS"]["id"];
$fp = fopen($xslstyle, "r");
$xsltdata["xsldata"]=fread($fp, 500000);
fclose($fp);
// do the translation
$result = xslt_process($xh, $xmlfile, 'arg:xsldata', NULL, $xsltdata);
?>
Fix I used to get around this:
add this line after $xh = xslt_create();
xslt_set_base($xh, "file:///");
Working Code:
<?
$xh = xslt_create();
// Added to fix trying to open arg:(and the file name)
xslt_set_base($xh, "file:///");
// End Added
// set xml file to be used with translation
$xmlfile=$GLOBALS["DOCUMENT_ROOT"]."/xml/product.xml";
// load dynamic xsl sheet to be used with translation
$xslstyle="http://".$GLOBALS["SERVER_NAME"]."/styles/product-detail.php?id=".$GLOBALS["HTTP_GET_VARS"]["id"];
$fp = fopen($xslstyle, "r");
$xsltdata["xsldata"]=fread($fp, 500000);
fclose($fp);
// do the translation
$result = xslt_process($xh, $xmlfile, 'arg:xsldata', NULL, $xsltdata);
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20177&edit=1