2011-12-23 3 views
2

Я работаю с одним приложением, в котором размещается SAXparsing. Чтобы получить имя City & State по широте и долготе, я использую Google API. Google API URL google apixml parsing using SAXParser

Я хочу, чтобы получить long_nameshort_name & type из заголовка Tag address_component.

Вся информация, которую я получаю от этого XML, но проблема в том, что когда я пытаюсь получить type Значение тега. В этом заголовке есть два тега type, и я всегда получаю второе значение type.

Пример XML:

<address_component> 
<long_name>Gujarat</long_name> 
<short_name>Gujarat</short_name> 
<type>administrative_area_level_1</type> 
<type>political</type> 
</address_component> 

Как я могу получить type значение тега administrative_area_level_1, а также political?

+0

Я думаю, вы должны проверить это: [Android - SAX Пример размеченного] (http://www.technotalkative.com/android -sax-parsing-example /) –

+0

Почему вы настаиваете на использовании SAX с таким маленьким XML-документом? Вы слышали о vtd-xml? –

ответ

0

Я добавляю данные в один файл с именем location.xml (если вы получите это из Интернета, выполните свою собственную логику для получения данных после того, как преобразование данных в Inputstream передало его следующему коду), я написал метод, в котором вы может получить его

public void ReadAndWriteXMLFileUsingSAXParser(){ 

     try 
     { 
      DefaultHandler handler = new MyHandler(); 
//    parseXmlFile("infilename.xml", handler, true); 
      SAXParserFactory factory = SAXParserFactory.newInstance(); 
      SAXParser saxParser = factory.newSAXParser(); 
      InputStream rStream = null; 
      rStream = getClass().getResourceAsStream("location.xml"); 
      saxParser.parse(rStream, handler); 
     }catch (Exception e) 
     { 
      System.out.println(e.getMessage()); 
     } 

    } 

Это класс MyHandler. ваши окончательные данные хранятся в один вектор называется как «данные»

class MyHandler extends DefaultHandler { 
    String rootname;Attributes atr; 
    private boolean flag=false;private Vector data; 
    public void startElement(String namespaceURI, String localName, 
          String qName, Attributes atts) { 
    rootname=localName; 
    atr=atts; 

    if(rootname.equalsIgnoreCase("address_component")){ 
     data=new Vector(); 
     flag=true; 
    } 


    } 
    public void characters(char[] ch, int start, int length){ 
     String value=new String(ch,start,length); 
     if(flag) 
     { 
      if(rootname.equalsIgnoreCase("type")){ 
       data.addElement(value) ; 
       System.out.println("++++++++++++++"+value); 
      } 
      if(rootname.equalsIgnoreCase("long_name")){ 
       data.addElement(value) ; 
       System.out.println("++++++++++++++"+value); 
      } 
      if(rootname.equalsIgnoreCase("short_name")){ 
       data.addElement(value) ; 
       System.out.println("++++++++++++++"+value); 
      } 
     } 

    } 
    public void endElement(String uri, String localName, String qName){ 
     rootname=localName; 
     if(rootname.equalsIgnoreCase("address_component")){ 
      flag=false; 
     } 
    } 
} 

вы можете найти все данные в вектор данных, а также вы можете найти данные onconsole в

++++++ ++++++++ Гуджарат

++++++++++++++ Гуджарат

++++++++++++++ administrative_area_level_1

++++++++++++++ политических

0

Прочитано this учебник. Это поможет вам проанализировать XML-файл с помощью парсера sax.