2011-09-02 136 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

哦,我必須在明天斯圖爾特上看看那個 –