Как взаимодействовать с кодом SaxParser после того, как RESTClient вернул данные XML? - PullRequest
0 голосов
/ 21 марта 2012

Мне нужно проанализировать данные XML, возвращаемые при доступе к службе на основе REST, для отображения только одного тега. Например, проанализируйте данные XML, показанные ниже, чтобы отобразить тег имени и значение только для Джона.

<company>
 <staff>
    <firstname>John</firstname>
    <lastname>Doe</lastname>

</staff>

</company>

Я изо всех сил пытаюсь выяснить, как взаимодействовать с кодом синтаксического анализа SAX, когда RESTClient возвращает данные XML. Я попробовал разные подходы после изучения различных примеров кода, но все еще не могу понять это частично, потому что они не имеют одинакового точного назначения. Поэтому, пожалуйста, научите меня, как вызывать / передавать данные в код синтаксического анализа и что возвращать из кода синтаксического анализа, должен ли код синтаксического анализа находиться в отдельном классе и т. Д. Я в основном не знаю, без каких-либо указаний. Соответствующий код RESTClient представлен ниже. Спасибо!

public class RESTClient {

public static String callRESTService(String url) {

    String result = null;
    HttpClient httpclient = new DefaultHttpClient();

    // Prepare a request object
    HttpGet httpget = new HttpGet(url);

    // Execute the request
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);

        // Get hold of the response entity
        HttpEntity entity = response.getEntity();
        // If the response does not enclose an entity, there is no need
        // to worry about connection release

        if (entity != null) {

            InputStream instream = entity.getContent();

            SAXParserFactory spf = SAXParserFactory.newInstance();
                            SAXParser sp;

            try (

                sp = spf.newSAXParser();
                XMLReader xr = sp.getXMLReader();


                DefaultHandler handler = new DefaultHandler();
                xr.setContentHandler(handler);

                InputSource is = new InputSource(instream);
                xr.parse(is);

                //what should/can be returned here from the parsing code:
                //String, InputSource, InputStream?.  Convert data type?


            }


            catch (SAXException e)
            {

                e.printStackTrace();
            }
            catch (ParserConfigurationException e)
            {

                e.printStackTrace();
            }
        }


    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return result; 
  }
)

Ответы [ 3 ]

1 голос
/ 21 марта 2012

http://as400samplecode.blogspot.com/2011/11/android-parse-xml-file-example-using.html

Вы должны расширить DefaultHandler и создать свой собственный обработчик XML, где вы будете анализировать ваш xml. Вы можете увидеть пример расширения Defaulthandler в ссылке выше.

1 голос
/ 21 марта 2012


Я настаиваю на том, чтобы вы хранили свой код парсера в отдельном файле. Так как RestClient отвечает только за отправку и получение данных из удаленного местоположения. Это также обеспечит потерю связи между двумя компонентами.
что возвращать из кода разбора Выход процессора зависит от ваших потребностей. (Лично я возвращаю список HashMap)

0 голосов
/ 21 марта 2012

Я предлагаю вам вернуть POJO здесь.

...