Парсинг XML с сайта на устройство Android - PullRequest
4 голосов
/ 17 января 2012

Я запускаю приложение для Android, которое будет анализировать XML из Интернета.Я создал несколько приложений для Android, но они никогда не занимались парсингом XML, и мне было интересно, есть ли у кого-нибудь какие-нибудь советы о том, как это сделать?

Ответы [ 5 ]

9 голосов
/ 17 января 2012

Вот пример:

        try {
            URL url = new URL(/*your xml url*/);
            URLConnection conn = url.openConnection();

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(conn.getInputStream());

            NodeList nodes = doc.getElementsByTagName(/*tag from xml file*/);
            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);
                NodeList title = element.getElementsByTagName(/*item within the tag*/);
                Element line = (Element) title.item(0);
                phoneNumberList.add(line.getTextContent());
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

В моем примере мой XML-файл выглядит примерно так:

<numbers>
   <phone>
      <string name = "phonenumber1">555-555-5555</string>
   </phone>
   <phone>
      <string name = "phonenumber2">555-555-5555</string>
   </phone>
</numbers>

, и я бы заменил /*tag from xml file*/ на "phone" и /*item within the tag*/ со «строкой».

1 голос
/ 17 мая 2012

Мне известны три типа анализа: DOM, SAX и XMLPullParsing.

В моем примере здесь вам понадобится URL и родительский узел элемента XML.

try {
    URL url = new URL("http://www.something.com/something.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(new InputSource(url.openStream()));
    doc.getDocumentElement().normalize();

    NodeList nodeList1 = doc.getElementsByTagName("parent node here");
    for (int i = 0; i < nodeList1.getLength(); i++) {
        Node node = nodeList1.item(i);
    }
} catch(Exception e) {

}

Также попробуйте это .

1 голос
/ 17 января 2012

Доступны различные типы механизмов синтаксического анализа, один из которых SAX Вот пример SAX-анализа , второй - анализ DOM Вот пример анализа DOM. . Из твоего вопроса не ясно, чего ты хочешь, но это может быть хорошей отправной точкой.

1 голос
/ 17 января 2012

Я всегда использую классы w3c dom.У меня есть статический вспомогательный метод, который я использую для анализа данных XML в виде строки и возвращает мне объект Document.Где вы получаете данные XML могут различаться (веб, файл и т. Д.), Но в конечном итоге вы загружаете их в виде строки.

как-то так ...

    Document document = null;
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder;

    try
    {
        builder = factory.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(data));
        document = builder.parse(is);
    }
    catch (SAXException e) { }
    catch (IOException e) { }
    catch (ParserConfigurationException e) { }
0 голосов
/ 17 января 2012

Я бы использовал DOM-парсер, он не так эффективен, как SAX, если XML-файл не слишком большой, так как в этом случае это проще.

Я создал только одно приложение для Android, которое занималось синтаксическим анализом XML.XML получен от веб-службы SOAP.Я использовал XmlPullParser.Реализация из Xml.newPullParser () имела ошибку, при которой вызовы nextText () не всегда переходили в END_TAG, как обещала документация.Для этого есть обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...