#android #xml-parsing #saxparser
#Android #xml-синтаксический анализ #saxparser
Вопрос:
Я прочитал несколько тем о том, как читать локальный файл XML.
Большинство из них используют openRawResource(). Однако это намного медленнее по сравнению с getXML().
Я хотел использовать getXML для своего проекта, есть ли какой-либо способ использовать getXML с XmlReader.parse(), поскольку SAX InputSource не принимает XmlResourceParser в качестве параметра.
Редактировать: кстати, когда будет вызван startElement endElement? Это сразу после XmlReader.parse? Возможно ли перезапустить синтаксический анализ сверху, когда я считываю определенное значение атрибутов?
Большое вам спасибо
Ответ №1:
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
MyXMLHandler myXMLHandler = new MyXMLHandler(getApplicationContext());
reader.setContentHandler(myXMLHandler);
reader.parse(new InputSource(getAssets().open("Getalloffersbyzipcoderesponse_xml.xml")));
// listView.setAdapter(new EventListAdapter(getApplicationContext(), 0, myXMLHandler.getEventList()));
listView.setAdapter(new OffersListAdapter(getApplicationContext(), 0, myXMLHandler.getOffersList()));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Ответ №2:
Вы можете использовать его (предположим, что вы храните свой XML в папке assets)
InputStream response=context.getAssets().open("your.xml");
и затем
Xml.parse(response, Xml.Encoding.UTF_8,rootElement.getContentHandler());
Комментарии:
1. По-видимому, я не смог получить доступ к xml, если я использую путь «assets/your.xml » но это работает, если это «your.xml »
2. Спасибо, что показали мне неправильную часть кода. Исправлено. Это была ошибка копирования-вставки.
Ответ №3:
Если вы хотите использовать функцию ‘getXML()’, вы можете ознакомиться с этим руководством, в котором показано, как использовать интерфейс ‘XmlResourceParser’: Ссылка
Другим способом было бы, если бы вы поместили XML-файлы в ‘openRawResource‘-метод, который возвращает ‘InputStream’ для заданного идентификатора ресурса, который затем вы можете передать обычному ‘SAXParser’.
Комментарии:
1. Я видел много сообщений о том, что openRawResource работает в 10 раз медленнее, чем getXML, вот почему я задал этот вопрос. Проверка предыдущей ссылки, которую вы предоставили 🙂
2. Я не уверен, есть ли какая-либо разница, но вы можете попробовать и посмотреть, какой из них быстрее…