XMLPullParser - getText () и getName () возвращают значения

Мне нужна помощь в понимании того, как читать следующий XML:

<?xml version = "1.0" encoding = "UTF-8"?>
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body>
      <GetRouteSummaryForStopResponse xmlns = "http://octranspo.com">
         <GetRouteSummaryForStopResult>
            <StopNo xmlns = "http://tempuri.org/">5212</StopNo>
            <StopDescription xmlns = "http://tempuri.org/">BANNER / PARKMOUNT</StopDescription>
            <Error xmlns = "http://tempuri.org/" />
            <Routes xmlns = "http://tempuri.org/">
               <Route>
                  <RouteNo>82</RouteNo>
                  <DirectionID>1</DirectionID>
                  <Direction>Westbound</Direction>
                  <RouteHeading>Bayshore</RouteHeading>
               </Route>
               <Route>
                  <RouteNo>282</RouteNo>
                  <DirectionID>0</DirectionID>
                  <Direction>Inbound</Direction>
                  <RouteHeading>Mackenzie King</RouteHeading>
               </Route>
            </Routes>
         </GetRouteSummaryForStopResult>
      </GetRouteSummaryForStopResponse>
   </soap:Body>
</soap:Envelope>

Im trying to retrieve the text of <StopNo> and <StopDescription> and others after. To debug Im пытается напечатать getName () и getText ().

//XmlPullParser - START
        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in, null);

            while (parser.next() != XmlPullParser.END_DOCUMENT) {
                Log.i("**********", parser.getName() + " " + parser.getText());
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                //Get Tag name
                String name = parser.getName();
                // Starts by looking for the temperature
                if (name.equalsIgnoreCase("StopNo")) {
                    stopNumber = parser.getText();
                    Log.i("***** OS doInBackground", "stopNumber " + stopNumber);
                }
                //look for speed tag
                if (name.equals("StopDescription")) {
                    stopDescription = parser.getText();
                    Log.i("***** OS doInBackground", "stopDescription " + stopDescription);
                }
            }




        } catch (Exception e){
            Log.i("****** Exception XML", e.getMessage());
        }
        if (in!=null) {
            try {
                in.close();
            } catch (IOException e) {
            }
        }

Однако я получаю следующий результат. Сначала он печатает открывающий тег getName (), getText () = null, затем null для тега и getText () = text и так далее.

...
I/**********: StopNo null
I/***** OS doInBackground: stopNumber null
I/**********: null 5212
I/**********: StopNo null
I/**********: StopDescription null
I/***** OS doInBackground: stopDescription null
I/**********: null BANNER / PARKMOUNT
I/**********: StopDescription null
I/**********: Error null
I/**********: Error null
I/**********: Routes null
I/**********: Route null
I/**********: RouteNo null
I/**********: null 82
I/**********: RouteNo null
...

Я не могу понять, почему отключены getName () и getText ()?

2
0
443
1

Ответы 1

Текст будет доступен, когда вы столкнетесь с XmlPullParser.TEXT. Вы читаете текст на XmlPullParser.START_TAG

вы можете попробовать этот код

      while (parser.next() != XmlPullParser.END_DOCUMENT) {
            Log.i("**********", parser.getName() + " " + parser.getText());

            switch (parser.getEventType()){
                case XmlPullParser.START_TAG:
                    String name = parser.getName();
                    Log.i("***** OS doInBackground", "name " + name);
                    break;
                case XmlPullParser.TEXT :
                    String text = parser.getText();
                    Log.i("***** OS doInBackground", "text " + text);


            }
        }

Спасибо! Следуя вашему коду, я сделал while (parser.next ()! = XmlPullParser.END_DOCUMENT) {if (parser.getEventType () == XmlPullParser.START_TAG) {if (parser.getName (). EqualsIgnoreCase ("StopNo")) {Log .i ("****** StopNo", "StopNo" + parser.nextText ()); } else if (parser.getName (). equalsIgnoreCase ("StopDescription")) {Log.i ("****** StopDescription", "StopDescription" + parser.nextText ()); }}

Pavel 22.03.2018 05:21

Другие вопросы по теме