2011-09-02 3 views
2

솔직히 말해서, 처음부터 내가 이런 종류의 물건으로 너무 좋지 않다는 것을 알려줄 것입니다. 나는 PHP/SQL에 익숙하지 않다. 나는이 순간에이 문제에 봉착했다. 그래서 어떤 도움을 주시면 감사하겠습니다. :)XML-RPC 데이터를 SQL 테이블로 가져 오기


내 문제는 다음입니다 :

웹 사이트 하나에, 나는이 API를 사용하여 액세스 (키)를 가지고있다. 그러나 문제는 XML-RPC입니다. 나는 모든 가이드를 읽었고 어떤 종류의 해결책을 찾기 위해 인터넷 검색을 시도했지만 그와 관련하여 운이 없었습니다.

XML-RPC 데이터를 기존 SQL 테이블로 직접 가져 오려고합니다. 나는 allready이

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됩니다하십시오 , 경우에도 그 단지 :). 내 해결책을 찾을 수있는 몇 가지 사실 helpfull 페이지로 사전에

감사합니다,
로렌

+2

당신이 당신의 XML에 의해 반환 된 페이로드의 사본을 게시 할 수 없습니다 :

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

이 사람은 PHP는 데이터와 MySQL을 사용하기위한 몇 가지 PHP 클래스를 갖고있는 것 같아요 -RPC 전화? XML-RPC는 원격 함수 호출을 만드는 방법 일뿐입니다. 그것은 함수 호출처럼 행동해야하며, 당신에게 뭔가를 돌려줍니다. 어떤 형식이 어떤지에 따라 DB에 삽입하기 위해 수행해야 할 작업이 결정됩니다. – Ray

답변

0

내가 실제로 XML의 형식에보고하지 않은 링크, 그래서 이것은 샘플 코드입니다, 당신의 삽입물을 할 코드가 아니야, 내가 늦게 기회가 있다면 나는 다시 와서 가까이에서 봐야 해. ur 데이터.

나는 ms_sql의 저장 프로 시저를 사용하여 xml을 가져 오는 것과 같은 것을 사용합니다. 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에는 'from openxml'과 비슷한 목적을 가진 ExtractValue() 함수가 있습니다.

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

오, 나는 내일 스튜어트 작업에서 그것을보아야 할 것이다. –

관련 문제