#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();
}