2011-09-02 3 views
2

Je veux être honnête, donc, je vous dirai dès le début que je ne suis pas très bon avec ce genre de choses. Je suis nouveau à PHP/SQL etc, et je suis un peu coincé avec ce problème que j'ai en ce moment, donc, toute aide sera appréciée. :)Importer des données XML-RPC dans la table SQL


Mon problème est à côté:

Sur un site, j'ai accès (clé) pour l'utilisation de l'API. Mais, le problème est que son XML-RPC. J'ai lu tous les guides et j'ai essayé de chercher une solution, mais je n'ai pas eu de chance avec ça.

Je souhaite importer des données XML-RPC directement dans une table SQL existante.


Ceci est la méthode que je veux utiliser pour appeler les données dont j'ai besoin:

Name: "money.received" 
Arguments: array ("API Key", "PlayerName","Minimum Timestamp (0 is fine for full history)") 
Returns: array(array (from, amount, timestamp)) 

Et ceci est le code que j'ai allready:

<?php 
$request2 = xmlrpc_encode_request("money.received", array('key','bware96', '0')); 
$context2 = stream_context_create(array('http' => array(
    'method' => "POST", 
    'header' => "Content-Type: text/xml\r\nUser-Agent: PHPRPC/1.0\r\n", 
    'content' => $request2 
))); 

$file2 = file_get_contents("http://www.test.net/xmlrpc.php", false, $context2); 
$response2 = xmlrpc_decode($file2); 
if ($response2 && xmlrpc_is_fault($response2)) { 
    trigger_error("xmlrpc: $response2[faultString] ($response2[faultCode])"); 
} else { 
    echo "<B>Money Received</B><BR>"; 
    # var_dump($response2); 
    echo "<BR>"; 



     echo "<table border='1'>"; 
    echo displayTree($response2); 
     echo "</table>"; 


} 

function displayTree($var) { 
    $newline = "\n"; 
    foreach($var as $key => $value) { 
     if (is_array($value) || is_object($value)) { 
      $value = $newline . "<tr>" . displayTree($value) . "</tr>"; 
     } 

     if (is_array($var)) { 
      if (!stripos($value, "<li>")) { 
       $output .= "<td>" . $value . "</td>" . $newline; 
      } 
      else { 
       $output .= $value . $newline; 
      } 

     } 


    } 

    return $output; 
} 
?> 

Le résultat de ce code, vous pouvez trouver ici: Test page

Alors oui, comme vous pouvez le voir, la fonction displayTree trie un peu vers le haut, toutes les données de ce xml. Mais, je veux importer ces données à SQL, et le problème est que je ne sais pas comment.

Je veux importer chacune de ces lignes séparément dans la table SQL appelée ,, client », donc je peux ensuite les trier dehors. :)

Alors, s'il vous plaît, toute aide sera reaaaaaally appreaciated, même si son simplement un lien vers la page une réalité helpfull où je peux trouver ma solution. :)

Merci à l'avance,
Lauren

+2

Pouvez-vous envoyer une copie de la charge utile retournée par votre XML Appel RPC? XML-RPC est juste une méthode pour faire des appels de fonction à distance. Il devrait agir comme un appel de fonction, vous renvoyer quelque chose. En fonction de ce qu'est ce format quelque chose va déterminer ce que vous devez faire pour l'insérer dans une base de données. – Ray

Répondre

0

Je n'ai pas vraiment regardé le format de votre xml, donc c'est un exemple de code, pas de code qui fera votre insertion, Si j'ai une chance en retard, je reviens et regarde de plus près yo vos données.

J'utilise quelque chose comme ça pour importer du XML en utilisant une procédure stockée dans ms_sql. Je transmets xml en tant que paramètre à la procédure stockée. Le XML est ensuite inséré dans une table temporaire, que je peux ensuite traiter en utilisant sql standard.

CREATE PROCEDURE [dbo].[procXMLImport] 
@pvchCustomXML varchar(max) = null, 
@piError int = 0 output, -- return error code as output parameter for c++ code 
@pvchError varchar(200) = '' output 

as 
begin 

    declare @rc int; 

    create table #import 
    (id int, val varchar(200)) 


    if (@pvchCustomXML is not null) 
    begin 

     declare @xml_id int 

     exec @rc = sp_xml_preparedocument @xml_id OUTPUT, @pvchCustomXML ; 

     if (@@error != 0 or @rc != 0) 
     begin 
      exec sp_xml_removedocument @xml_id; 

      set @pvchError = 'sp_xml_preparedocument failed' 
      set @piError = -1 
      return @piError; 
     end 

     -- put values into temps table 
     -- not strictly required but seperates potential errors 

     insert #import 
     select id, val 

     from  
     openxml (@xml_id , 'Custom/Lines/Line', 1) -- 'Custom/Lines/Line' specifies where in the xml structure to extract the data from 
     with (id int, val varchar(200)) 

     if (@@error != 0) 
     begin 
      exec sp_xml_removedocument @xml_id; 
      set @pvchError = 'import failed' 
      set @piError = -2 
      return @piError; 
     end; 

     --clean up xml , no longer required 
     exec sp_xml_removedocument @xml_id; 

    end 

    select * from #import 
end 

Mysql a une fonction ExtractValue(), qui semble avoir un effet similaire à "de openxml.

http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html

et ce gars semble avoir des classes PHP pour utiliser MySQL avec des données php:

http://www.phpclasses.org/package/782-PHP-Insert-XML-in-MySQL-and-export-MySQL-to-XML.html

et

+0

SQL Server 2005/2008 a considérablement amélioré leurs méthodes de gestion de XML. Bien que le code suggéré ci-dessus fonctionne toujours, la nouvelle syntaxe utilisant les types de données xml est beaucoup plus simple à utiliser. –

+0

oh je vais devoir regarder ça demain au travail stuart –

Questions connexes