Мне нужна помощь в понимании того, как читать следующий 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 ()?
Текст будет доступен, когда вы столкнетесь с 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 ()); }}