Android анализирует XML на основе значения даты

#java #android #xml

#java #Android #xml

Вопрос:

Как бы я только возвращал / анализировал элементы узла, которые имеют определенное значение.

Ниже приведен мой простой XML, но мне нужен только тот time , meeting_name и host_name из тех meeting_item , у которых есть дата 2012-03-09 :

 <meeting_item>
    <time>12:30</time>
    <date>2012-03-09</date>
    <meeting_name>build a shop 4</meeting_name>
    <host_name>Bob Jones</host_name>
</meeting_item>
<meeting_item>
    <time>11:30</time>
    <date>2012-03-23</date>
    <meeting_name>build a shop advance</meeting_name>
    <host_name>Judy Washington</host_name>
</meeting_item>
<meeting_item>
    <time>11:30</time>
    <date>2012-03-23</date>
    <meeting_name>build a shop 2</meeting_name>
    <host_name>Tom Smith</host_name>
</meeting_item>
<meeting_item>
    <time>11:30</time>
    <date>2012-04-06</date>
    <meeting_name>build a shop 3</meeting_name>
    <host_name>Tom Green</host_name>
</meeting_item>
  

Ниже приведен мой код синтаксического анализа, но он просто получает все в файле:

         String xml = XMLfunctions.getXML(items);
        Log.d(TAG, xml);
        Document doc = XMLfunctions.XMLfromString(xml);
 int numResults = XMLfunctions.numResults(doc);

        if((numResults <= 0)){
            Toast.makeText(MeetingManager.this, "NOT GETTING XML", Toast.LENGTH_LONG).show();  
            finish();
        }

        Element docElem = doc.getDocumentElement();
        NodeList nl = docElem.getElementsByTagName("Meeting_Data");
        Element elem = (Element)nl.item(1);
        NodeList nodes = elem.getElementsByTagName("meeting_item");



        for (int i = 0; i < nodes.getLength(); i  ) {                           
            HashMap<String, String> map = new HashMap<String, String>();    

            Element e = (Element)nodes.item(i);
            map.put("time", XMLfunctions.getValue(e, "time"));
            map.put("name", XMLfunctions.getValue(e, "meeting_name"));
            map.put("hostname", XMLfunctions.getValue(e, "host_name"));
            mylist.add(map);            
        }       

        ListAdapter adapter = new SimpleAdapter(MeetingManager.this, mylist , R.layout.listlayout, 
                        new String[] {"time", "name", "hostname" }, 
                        new int[] { R.id.time, R.id.meeting_name, R.id.host });

       setListAdapter(adapter);
  

Также в моем logCat Log.d(TAG, xml); не проходит весь путь через файл. И иногда выдает ошибку и сообщение о том, что не читается весь файл. Есть ли ограничение, которое я могу HttpGet?

Ответ №1:

Если вы хотите проанализировать только часть XML-файла, я рекомендую вам использовать что-то вроде XmlPullParser или SAXParser. Поскольку анализатор dom попытается создать полное дерево объектов на основе ваших XML-данных. Чтобы сделать это с помощью xml pull parser, ваш код синтаксического анализа будет выглядеть следующим образом

 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(is,"UTF-8");

int eventType = xpp.getEventType();
outerloop: 
while (eventType != XmlPullParser.END_DOCUMENT) {
    switch(eventType){
        case XmlPullParser.START_DOCUMENT: 
            Log.e("Start","Start");
            break;
        case XmlPullParser.START_TAG:
            Log.e("StartTag", xpp.getName());
            break;                      
        case XmlPullParser.END_TAG:
            Log.e("EndTag", xpp.getName());
                  //When you need to stop parsing use this
                  break outerloop;
            break;
    }
    eventType = xpp.next();
}