Импорт данных XML-RPC в таблицу SQL - PullRequest
2 голосов
/ 02 сентября 2011

Я хочу быть честным, поэтому я скажу вам с самого начала, что я не слишком хорош в подобных вещах. Я новичок в PHP / SQL и т. Д., И я как бы застрял с этой проблемой, которая у меня есть в данный момент, поэтому любая помощь будет оценена. :)


Моя проблема следующая:

На одном сайте у меня есть доступ (ключ) для использования API. Но проблема в том, что это XML-RPC. Я прочитал все руководства и попробовал поискать какое-то решение, но мне не повезло с этим.

Я хочу импортировать данные 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;
}
?>

Результат этого кода вы можете найти здесь: Тестовая страница

Итак, как вы видите, функция displayTree вроде как сортирует все данные в этом xml. Но я хочу импортировать эти данные в SQL, и проблема в том, что я не знаю как.

Я хочу импортировать каждую из этих строк отдельно в таблицу SQL с именем ,, client ", чтобы потом можно было ее отсортировать.:)

Так что, пожалуйста, любая помощь будет оценена, даже если это просто ссылка на какую-то действительно полезную страницу, где я могу найти свое решение. :)

Заранее спасибо,
Lauren

1 Ответ

0 голосов
/ 21 ноября 2011

Я на самом деле не смотрел на формат вашего 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

и

...