парсинг xml с использованием SAXParser - PullRequest
2 голосов
/ 23 декабря 2011

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

Я хочу получить long_name short_name & type тега заголовка address_component.

Вся информация, которую я получаюуспешно из этого XML, но проблема в том, что, когда я пытаюсь получить type значение тега.В этом заголовке есть тег Two 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?

Ответы [ 3 ]

1 голос
/ 10 июля 2013

Я наткнулся на следующую ссылку, с которой действительно легко начать http://javarevisited.blogspot.com/2011/12/parse-read-xml-file-java-sax-parser.html

0 голосов
/ 23 декабря 2011

Читать это учебник. Это поможет вам разобрать xml-файл с помощью синтаксического анализатора саксофона.

0 голосов
/ 23 декабря 2011

Я добавляю данные в один файл с именем 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.Ваши окончательные данные хранятся в одном векторе, называемом «data»

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;
         }
    }
}

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

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

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

++++++++++++++ administrator_area_level_1

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

...