Ответы пользователя по тегу XML
  • Как написать, чтобы программа отправляла запрос по заданному адресу сайта, получала xml файл и извлекала из него данные?

    palmut
    @palmut
    Вопрос из разряда — как написать программу для Android. :)

    Схема такова:
    1. Формируем запрос
    2. Если удачно — запускаем парсер
    3. Возвращаем данные

    Сам процесс хорошо бы запускать не в UI треде, т.е. надо использовать Thread, AsyncTask или AsyncTaskLoader (от ситуации зависит).

    Выглядит примерно так:
    	private void downloadContent() {
    		HttpURLConnection connection = null;
    		BufferedInputStream ins = null;
    		String urlString = "<заданный адрес сайта>";
    
    		try {
    			URL url = new URL(urlString);
    
    			connection = (HttpURLConnection) url.openConnection();
    			int status = connection.getResponseCode();
    			if (status == HttpURLConnection.HTTP_OK) {
    				XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
    				ins = new BufferedInputStream(connection.getInputStream());
    				parser.setInput(ins, null);
    				parseData(parser);
    			}
    
    		} catch (Exception e) {
    			// надо обработать исключение
    		} finally {
    			if (ins != null) {
    				try {
    					ins.close();
    				} catch (IOException e) {}
    			}
    		}
    
    	}
    	
    	public void parseData(XmlPullParser parser) throws XmlPullParserException, IOException {
    
    		int eventType = parser.getEventType();
    		final String xmlTag = "rootTAG";
    
    		do {
    			if (eventType == XmlPullParser.START_TAG) {
    				String name = parser.getName();
    				if (xmlTag.equalsIgnoreCase(name) && (parser.getAttributeCount() > 0)) {
    					for (int i = 0, N = parser.getAttributeCount(); i < N; i++) {
    						// парсим атрибуты
    						parseAttribute(parser.getAttributeName(i), parser.getAttributeValue(i));
    					}
    				}
    				// парсим вложенный таг
    				parseTag(parser);
    			}
    			eventType = parser.next();
    		} while (!(eventType == XmlPullParser.END_TAG && xmlTag.equals(parser.getName()))
    						&& (eventType != XmlPullParser.END_DOCUMENT));
    
    	}
    
    


    Задавайте вопросы — раскрою тему.
    Ответ написан
    Комментировать