Как разобрать этот XML в Android? - PullRequest
0 голосов
/ 14 декабря 2010

Я новичок в разборе XML, и у меня есть мой метод разбора XML. Только этот метод предназначен для простых макетов XML с одним дочерним узлом.

Теперь мне нужно проанализировать XML-файл с дочерними элементами, у которых есть дочерние элементы, у которых есть дочерние элементы (получил:)?)

Это метод парсинга, который у меня сейчас есть:

protected Map<String, Maatschappij> getAutopechTel() {
    Map<String, Maatschappij> telVoorAutopech = new HashMap<String, Maatschappij>();

    try {
        DocumentBuilder builder = DocumentBuilderFactory.newInstance()
                .newDocumentBuilder();
        Document doc = builder.parse(getAssets().open("autopech.xml"));
        NodeList nl = doc.getElementsByTagName("dienst");
        for (int i = 0; i < nl.getLength(); i++) {
            Node node = nl.item(i);
            Maatschappij maat = new Maatschappij();

            maat.setNaam(Xml.innerHtml(Xml.getChildByTagName(node, "naam")));
            maat.setTel(Xml.innerHtml(Xml.getChildByTagName(node, "tel")));

            telVoorAutopech.put(maat.getTel(), maat);
        }
    } catch (Exception e) {
    }
    return telVoorAutopech;
}

Как мне отрегулировать это, чтобы проанализировать этот тип файла XML:

   <Message>  

    <Service>Serviceeee</Service>

      <Owner>Bla</Owner>

      <LocationFeedTo>Too</LocationFeedTo>

      <Location>http://maps.google.com/?q=52.390001,4.890145</Location>

      <Child1>

        <Child1_1>

          <Child1_1_1>ANWB</Child1_1_1>

        </Child1_1>
      </Child1>
<Message>

1 Ответ

0 голосов
/ 14 декабря 2010

Вы можете использовать SAXParser для анализа XML в Android:

Вот подробное руководство с примером и , а также другое здесь от IBM developerWorks .

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

Попробуйте это, но я еще не тестировал этот код. Он рекурсивно пересекает все узлы и добавляет ELEMENT_NODE к Vector<Node>.

public void traverseNodes(Node node, Vector<Node> nodeList)
{
    if(node.getNodeType() == Node.ELEMENT_NODE)
    {
        nodeList.add(node);
        if(node.getChildNodes().getLength() >= 1)
        {
            NodeList childNodeList = node.getChildNodes();
            for(int nodeIndex = 1;nodeIndex < childNodeList.getLength(); nodeIndex++)
            {
                traverseNodes(childNodeList.item(nodeIndex),nodeList);
            }
        }
    }

}
...