Парсинг XML RPC результат с Android - PullRequest
0 голосов
/ 20 июля 2011

Нужно ли поместить XML-результат во временный локальный XML-файл, а затем проанализировать оттуда? Я пытаюсь создать «простую» конвертацию валюты, используя RPC API Foxrate на http://foxrate.org/,, и я застрял в попытке выяснить, что делать дальше. Примеры XML, которые я здесь выполнил, хороши, некоторые из них являются превосходными для того, что мне нужно (я думаю). Я использую RPC-библиотеку Android XML от code.google, поэтому могу начать с приведенного ниже.

  uri = URI.create("http://foxrate.org/rpc/");
    client = new XMLRPCClient(uri);
    Object FoxResult = null;

    try {
        FoxResult = client.call("foxrate.currencyConvert", sourceCurrency, targetCurrency, conversionValue);
        Log.d("XMLRPC Test", "result conversion" );                 
    } catch (XMLRPCException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.d("XMLRPC Test", "Error", e);
    }

Но что тогда? Последние пару дней я пытался выяснить, как разделить структуру результатов и поместить их в переменные, которые я могу использовать. Использую ли я DOM или SAX, чтобы извлечь нужную мне информацию? И мне нужно написать обработчик событий, как упомянуто здесь, http://www.anddev.org/web_services_-_an_xml-rpc_client_for_android-t646.html, для этого? Я обнаружил, что есть масса информации, но все с разными решениями.

Ответ от сервера выглядит примерно так:

   <params>
    <param>
        <value>

            <struct>

                <member>
                    <name>flerror</name>
                    <value>
                        <int>0</int>
                    </value>
                </member>

                <member>
                    <name>amount</name>
                    <value>
                        <double>50.36</double>
                    </value>
                </member>

                <member>
                    <name>message</name>
                    <value>
                        <string>"2/9/2007"</string>
                    </value>
                </member>

            </struct>
        </value>

    </param>
</params>

Спасибо за любое направление!

1 Ответ

1 голос
/ 20 июля 2011

Попробуйте это:

Map<String, Object> FoxResult = client.call("foxrate.currencyConvert", sourceCurrency, targetCurrency, conversionValue);
int flerror = Integer.valueOf(FoxResult.get("flerror").toString());
double amount = Double.valueOf(FoxResult.get("amount").toString());
String message = FoxResult.get("message").toString();

Вам нужно будет выполнить соответствующую проверку исключений и пропущенных значений, но для struct типов он возвращает карту.

...