SAXParser с локальным файлом XML

#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. Я не уверен, есть ли какая-либо разница, но вы можете попробовать и посмотреть, какой из них быстрее…