问题是,是否有其他(更好)的方式来实现我所做的事情。
我正在尝试的是,使XSLT将文件写入运行XSLT的服务器上。
注意:它必须是XSLT-1.0,因为它是由PHP脚本调用的。
PHP脚本在本地服务器上运行,并从java程序中调用
XSLT生成一条发送回java程序的消息,所以我不能使用<xsl:output method="xml"/>
我的XSLT中的输入是一个XML,其中还有另一个XML,它是base64编码的。
我解决这个问题的方法是,我正在使用PHP回调
XLST
<!--base64 decode the file so it can be written onto the server-->
<xsl:variable name="base64decode">
<xsl:if test="not(contains($login ,'Invalid')))">
<xsl:value-of select="php:function('base64_decode', string($product))"/>
</xsl:if>
</xsl:variable>
<!--php call-back to write the file onto the server-->
<xsl:variable name="fileputcontent">
<xsl:if test="$base64decode != ''">
<xsl:value-of select="php:function('postProduct::wirteFileOnServer', string($base64decode))"/>
</xsl:if>
</xsl:variable>
PHP
class postProduct {
public static function writeFileOnServer($file, $path){
file_put_contents($path, $file);
$ret = new DOMDocument('1.1', 'UTF-8');
if(not(is_file($path))){
$res = '<error>';
$res.= '<msg>An Error occurred</msg>';
$res.= '</error>';
}
$res = '<data>'.$res.'</data>';
$res = $ret->loadXML($res, LIBXML_NOERROR | LIBXML_NOWARNING);
if ($res !== TRUE) {
$ret->appendChild($err);
}
return $ret;
}
}