2011-02-25 13 views

Respuesta

30

Un ejemplo con XMLWriter.

mysql_connect('server', 'user', 'pass'); 
mysql_select_db('database'); 

$sql = "SELECT udid, country FROM table ORDER BY udid"; 
$res = mysql_query($sql); 

$xml = new XMLWriter(); 

$xml->openURI("php://output"); 
$xml->startDocument(); 
$xml->setIndent(true); 

$xml->startElement('countries'); 

while ($row = mysql_fetch_assoc($res)) { 
    $xml->startElement("country"); 

    $xml->writeAttribute('udid', $row['udid']); 
    $xml->writeRaw($row['country']); 

    $xml->endElement(); 
} 

$xml->endElement(); 

header('Content-type: text/xml'); 
$xml->flush(); 

Salida:

<?xml version="1.0"?> 
<countries> 
<country udid="1">Country 1</country> 
<country udid="2">Country 2</country> 
... 
<country udid="n">Country n</country> 
</countries> 
+0

@XcodeDev, debe modificar el código SQL en su esquema de base de datos. – Czechnology

8
<?php 

mysql_connect('myserver', 'username', 'password'); 
mysql_select_db('mydatabase'); 
$result = mysql_query('SELECT `udid`, `country` FROM `MyTable`'); 

while($data = mysql_fetch_assoc($result)) { 
    foreach($data as $key => $value) { 
    echo "<$key>$value</$key>"; 
    } 
} 

?> 

Este fragmento de código debería darle un buen comienzo. Pero sin la estructura XML deseada, es difícil hacerlo mejor.

Sin embargo, no estoy seguro de que PHP sea la solución adecuada para esta tarea. Muchas herramientas, como phpmyadmin, por ejemplo, pueden generar datos de mysql en formato XML.

+0

gracias, me sale el error Parse error: syntax error, unexpected '{embargo! –

+0

falta el cierre ')' en 'while()'. Además, escriba typo en 'mysql_queery()' – drudge

1
<?php 

mysql_connect('myserver', 'username', 'password'); 
mysql_select_db('mydatabase'); 
$result = mysql_query('SELECT `udid`, `country` FROM `MyTable`'); 

$Result = "<?xml version='1.0' encoding='utf-8'?>\n<employees>\n"; 

while($data = mysql_fetch_assoc($Recordset1)) { 
    $Result .= " <employee>\n"; 
    foreach($data as $key => $value) { 
    $Result .= " <$key>$value</$key>\n"; 
    } 
    $Result .= " </employee>\n"; 
} 
$Result .= "</employees>\n"; 
echo $Result; 

?> 
0

Me esfuerzo mucho para encontrar esta solución en formato mysqli pero en ninguna parte he encontrado la solución. A continuación está la solución que imaginé. Espero que ayude a alguien.

<?php 
//Create file name to save 
$filename = "export_xml_".date("Y-m-d_H-i",time()).".xml"; 

$mysql = new Mysqli('server', 'user', 'pass', 'database'); 
if ($mysql->connect_errno) { 
    throw new Exception(sprintf("Mysqli: (%d): %s", $mysql->connect_errno, $mysql->connect_error)); 
} 

//Extract data to export to XML 
$sqlQuery = 'SELECT * FROM t1'; 
if (!$result = $mysql->query($sqlQuery)) { 
    throw new Exception(sprintf('Mysqli: (%d): %s', $mysql->errno, $mysql->error)); 
} 

//Create new document 
$dom = new DOMDocument; 
$dom->preserveWhiteSpace = FALSE; 

//add table in document 
$table = $dom->appendChild($dom->createElement('table')); 

//add row in document 
foreach($result as $row) { 
    $data = $dom->createElement('row'); 
    $table->appendChild($data); 

    //add column in document 
    foreach($row as $name => $value) { 

     $col = $dom->createElement('column', $value); 
     $data->appendChild($col); 
     $colattribute = $dom->createAttribute('name'); 
     // Value for the created attribute 
     $colattribute->value = $name; 
     $col->appendChild($colattribute);   
    } 
} 

/* 
** insert more nodes 
*/ 

$dom->formatOutput = true; // set the formatOutput attribute of domDocument to true 
// save XML as string or file 
$test1 = $dom->saveXML(); // put string in test1 
$dom->save($filename); // save as file 
$dom->save('xml/'.$filename); 
?> 
0
<?php 

    // Create connection 
    $con=mysqli_connect("localhost","root","root","students"); 

    // Check connection 
    if (mysqli_connect_errno()) 
    { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

    //get student ID from URL 
    $STU_ID = $_GET['id']; 

    $sql = "SELECT * FROM students_info WHERE ID = ".$STU_ID; 
    $res = mysqli_query($con, $sql); 

    $xml = new XMLWriter(); 

    $xml->openURI("php://output"); 
    $xml->startDocument(); 
    $xml->setIndent(true); 

    $xml->startElement('students'); 

    while ($row = mysqli_fetch_assoc($res)) { 
     $xml->startElement("student"); 

     $xml->writeElement("id", $row['ID']); 
     $xml->writeElement("name", $row['name']); 
     $xml->writeElement("gpa", $row['GPA']); 
     $xml->writeRaw($row['student']); 

     $xml->endElement(); 
    } 

    $xml->endElement(); 

    header('Content-type: text/xml'); 
    $xml->flush(); 

    // Free result set 
    mysqli_free_result($result); 
    // Close connections 
    mysqli_close($con); 
?> 
Output 
<students> 
    <student> 
     <id>111</id> 
     <name>sara</name> 
     <gpa>4.5</gpa> 
    </student> 
</students> 
+0

He mejorado el formato de tu código. Sugeriría que mejore su respuesta aún más dando una explicación de su código incluyendo lo que hace y por qué y cómo responde a las preguntas. – mmgross

Cuestiones relacionadas