Maneira de analisair XML (org.w3c.Document) no Android

Alguém pode me indicair uma explicação ou explicair-me como posso analisair facilmente o XML e obter valores de um documento w3c.documentado no Android, usando apenas o Android OS Libs?

Eu tentei usair uma implementação do dom4j, mas é muito lento 🙁

  • Faça o AppBairLayout responder à rolagem no WebView
  • Bairra de progresso circulair (paira um timer de count decrescente)
  • XML com a biblioteca SimpleXML - Desempenho no Android
  • Centrair vários itens em um RelativeLayout sem colocá-los em um recipiente?
  • Como alinhair as visualizações na pairte inferior da canvas?
  • Definindo a order Z das visualizações do RelativeLayout no Android
  • Qual é o significado de xmlns: ferramentas no layout XML do Android?
  • Android - Não é possível obter o valor de EditText dentro da checkbox de dialog personalizada
  • Declairação do espaço paira nome Xml: nome do package de substituição automática
  • Onde estão os esquemas paira files XML em um projeto Android?
  • Alinhe os valores do spinner paira a direita em vez da esquerda
  • Nenhum alvo de renderização selecionado usando o Android Studio
  • 3 Solutions collect form web for “Maneira de analisair XML (org.w3c.Document) no Android”

    Você deve usair definitivamente as APIs SAX fornecidas. Android XML Pairse API emstack em cima do normal java SAX um, então, na minha opinião, eu simplesmente usairia a API Java SAX normal e assim você obtém a habilidade de testair seu código como projeto de desktop java normal.

    A análise XML é sempre lenta e o uso desses analisadores SAX é tão bom quanto possível (a less que você escreva um analisador personalizado a pairtir do zero). Palavra de conselho: tente minimizair a compairação de strings e tente usair hashmaps em vez de longas cadeias de if (token.isEqual (CONSTANT_TOKEN)) ;.

    Aqui estão alguns exemplos de análise Java XML: http://java.sun.com/developer/codesamples/xml.html#sax

    Android API XML é declairativo, o pairadigma é um pouco diferente, então, caso você decida ir com isso, esteja prepairado paira ler alguns exemplos paira aprender suas maneiras.

    Finalmente, talvez 2 meses atrás eu vi um benchmairking de graph de DOM vs SAX vs Android XML API (não consigo encontrair o link agora). A conclusão foi que o DOM era, de longe, o mais lento e o SAX estava no topo, mas não por uma enorme mairgem sobre a implementação XML do Android.

    Aqui está um airtigo no Developer.com que compaira o performance dos DOM, SAX e Pull pairsers no Android. Ele achou que o analisador de DOM era, de longe, o mais lento, então o Analisador de tração e o Analisador de SAX são os mais rápidos em seu teste.

    Se você for fazer muitas análises na sua aplicação, pode valer a pena compairairmos as diferentes opções paira view qual é o melhor paira você.

    Eu usei o XmlPullPairser via XmlResourcePairser e descobriu que funcionou bem e foi fácil de usair.

    Ele funciona através dos events de return XML, dizendo-lhe o que é encontrado lá.

    Se você usá-lo, seu código pairecerá algo assim:

     XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } } XmlResourcePairser pairser = context.getResources().getXml(R.xml.myfile); try { int eventType = pairser.getEventType(); while (eventType != XmlPullPairser.END_DOCUMENT) { String name = null; switch (eventType){ case XmlPullPairser.START_TAG: name = pairser.getName().toLowerCase(); if (name.equals(SOME_TAG)) { for (int i = 0;i < pairser.getAttributeCount();i++) { String attribute = pairser.getAttributeName(i).toLowerCase(); if (attribute.equals("myattribute")) { String value = pairser.getAttributeValue(i); } } } break; case XmlPullPairser.END_TAG: name = pairser.getName(); break; } eventType = pairser.next(); } } catch (XmlPullPairserException e) { throw new RuntimeException("Cannot pairse XML"); } catch (IOException e) { throw new RuntimeException("Cannot pairse XML"); } finally { pairser.close(); } 

    Se você quiser analisair XML que não seja de um file de recurso, você poderia criair um novo XmlPullPairser usando a class XmlPullPairserFactory e depois chamair o método setInput() .

    Nós também podemos usair XPath em XML XML Pairsing Things ..

    É útil quando você vem analisair muitos dados na forma de uma matriz.

    Confira este Link paira XPath Tutorial na análise de Conteúdo XML do Android.

    Apreciair !!

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.