2011-09-02 92 views
2

我想说实话,所以我从一开始就会告诉你我对这类东西不太好。我是新来的PHP/SQL等,我有点困扰,我在这个时候有这个问题,所以,任何帮助将不胜感激。 :)将XML-RPC数据导入SQL表


我的问题是下一:

在一个网站上,我有使用API​​访问(密钥)。但是,问题在于它的XML-RPC。我已阅读所有指南,并尝试通过Google搜索某种解决方案,但我没有这方面的运气。

我想将XML-RPC数据直接导入到现有的SQL表中。


这是我想用来调用数据的方法,我需要:

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

这是我的代码有媒体链接:

<?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; 
} 
?> 

的代码,你可以在这里找到的结果:Test page

所以啊,你可以看到,功能displayTree还挺排序起来,在XML中的所有数据。但是,我想将这些数据导入到SQL中,问题是我不知道如何。

我想每个这些行分别导入到一个名为,,客户端” SQL表,这样我就可以再整理出来。:)

所以,请,任何帮助将reaaaaaally appreaciated,即使其只是链接到一些真正有益的页面,在这里我能找到我的解决方案。:)提前

感谢,
劳伦

+2

你能发表您的XML返回的有效载荷的副本-RPC电话? XML-RPC只是一种进行远程函数调用的方法。它应该像函数调用一样,返回给你一些东西。取决于某些格式是什么将决定你需要做什么来将其插入到数据库中。 – Ray

回答

0

我还没有实际看你的XML格式,所以这是示例代码,没有代码可以插入,如果我有机会迟到,我会回来仔细看看哟你的数据。

我使用类似的东西来导入xml使用ms_sql中的存储过程。 我将xml作为参数传递给存储过程。然后将XML插入临时表中,然后我可以使用标准的SQL进行处理。

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有一个函数ExtractValue(),它似乎有一个类似'从openxml'的目的。

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

这家伙似乎有一些PHP类使用MySQL的使用PHP数据:

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

+0

SQL Server 2005/2008极大地改进了他们处理XML的方法。虽然上面提供的代码仍然可以工作,但使用xml数据类型的新语法要直接使用更简单。 –

+0

哦,我必须在明天斯图尔特上看看那个 –