function sqlToXml($queryResult, $rootElementName, $childElementName)
{
$xmlData = "\n";
$xmlData .= "<" . $rootElementName . ">";
while($record = mysql_fetch_object($queryResult))
{
/* Create the first child element */
$xmlData .= "<" . $childElementName . ">";
for ($i = 0; $i < mysql_num_fields($queryResult); $i++)
{
$fieldName = mysql_field_name($queryResult, $i);
/* The child will take the name of the table column */
$xmlData .= "<" . $fieldName . ">";
/* We set empty columns with NULL, or you could set
it to '0' or a blank. */
if(!empty($record->$fieldName))
$xmlData .= $record->$fieldName;
else
$xmlData .= "null";
$xmlData .= "" . $fieldName . ">";
}
$xmlData .= "" . $childElementName . ">";
}
$xmlData .= "" . $rootElementName . ">";
return $xmlData;
}
?>
Ejemplo
Un ejemplo de servidor SOAP:
require_once "nusoap.php";
function getSamples($year) {
$user="TISD";
$password="*******";
$db=mysql_connect("localhost",$user,$password) or die("Error en la conexión a MySql");
$sql=utf8_decode("SELECT *.`codigo_libro`, *.`codigo_ejemplar` FROM `vista:Completa` WHERE `year`='$year'");
$result=mysql_db_query("TISD",$sql,$db);
mysql_close();
if ($result)
{
return sqlToXml($result, "samples", "sample");
}
else {
return "No hay ejemplares de este año";
}
}
$server = new soap_server();
$server->configureWSDL("sample", "urn:sample");
$server->register("getSamples",
array("year" => "xsd:string"),
array("return" => "xsd:string"),
"urn:sample",
"urn:sample#getSample",
"rpc",
"encoded",
"Nos da una lista de ejemplares en este año");
$server->service(file_get_contents('php://input'));
?>
Paso 2. Creación de una página web (puede estar en otro servidor) en php que será cliente del servidor SOAP anterior
Por ejemplo, se va a crear una página que muestre la lista de ejemplares del servicio getSamples ofrecido por el anterior servidor SOAP.
Ejemplo
Un ejemplo de cliente SOAP
require_once "nusoap/lib/nusoap.php";
$cliente = new nusoap_client("http://bios.ugr.es/TISD/TutorialPHP/SOAP/sample.php");
//$cliente= new nusoap_client ("samples.wsdl", true);
$error = $cliente->getError();
if ($error) {
echo "Constructor error" . $error;
}
$result = $cliente->call("getSamples", array("year" => "activo"));
if ($cliente->fault) {
echo "Fault";
print_r($result);
}
else {
$error = $cliente->getError();
if ($error) {
echo "Error". $error;
}
else {
echo "Samples";
echo $result;
}
}
?>
~