вопрос в том, есть ли другой (лучший) способ реализовать то, что я сделал.
Я пытался создать 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;
}
}
Задача ещё не решена.
Других решений пока нет …