


Comment Android utilise DOM et SAXParserFactory pour analyser les fichiers XML
Pour le fichier XML suivant :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <books> <book email="zhoujunhui"> <name>rjzjh</name> <price>jjjjjj</price> </book> <book email="aaaaaaaaa"> <name>bbbb</name> <price>ccc</price> </book> </books>
analysez-le comme ceci :
import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; import android.os.Bundle; import android.util.Log; public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); XmlReader(); for(int i=0;i<list.size();i++) { Book book = list.get(i); Log.d("TAG", "name="+book.name+"email="+book.email); } } public void XmlReader() { Document doc = null; AssetManager assetManager = this.getAssets(); DocumentBuilder docBuilder = null; DocumentBuilderFactory docBuilderFactory = null; try { docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilder = docBuilderFactory.newDocumentBuilder(); doc = docBuilder.parse(assetManager.open("test1.xml")); Element root = doc.getDocumentElement(); NodeList books = root.getChildNodes(); if (books != null) { for (int i = 0; i < books.getLength(); i++) { Node book = books.item(i); Book mybook = null; if (book.getNodeType() == Node.ELEMENT_NODE) { //这里才表示这个是<book>节点 mybook = new Book(); String email = book.getAttributes() .getNamedItem("email").getNodeValue(); mybook.email = email; for (Node node = book.getFirstChild(); node != null; node = node .getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE) { if (node.getNodeName().equals("name")) { String name1 = node.getFirstChild() .getNodeValue(); mybook.name = name1; } if (node.getNodeName().equals("price")) { String price = node.getFirstChild() .getNodeValue(); mybook.price = price; } } } list.add(mybook); } } } } catch (Exception e) { e.printStackTrace(); } } private ArrayList<Book> list = new ArrayList<Book>(); private class Book{ String email; String name; String price; }
Utilisation de SAXParserFactory :
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); InputStream is = this.getAssets().open("test1.xml", Context.MODE_PRIVATE); saxParser.parse(is, new MyDefaultHandler()); } catch (Exception ex) { } System.out.println("===size=" + list.size()); for (int i = 0; i < list.size(); i++) { Book book = list.get(i); Log.d("TAG", "name=" + book.name + "email=" + book.email); } } protected String getElementName(String name, String qName) { if ("".equals(name)) { return qName; } else { return name; } } class MyDefaultHandler extends DefaultHandler { private StringBuffer buf; private Book mBook; public MyDefaultHandler() { super(); mBook = new Book(); } protected StringBuffer getBuffer() { return this.buf; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); buf = new StringBuffer(); for (int i = 0; i < attributes.getLength(); i++) { String value = attributes.getValue(i); mBook.email = value; } } @Override public void characters(char[] chars, int start, int length) throws SAXException { super.characters(chars, start, length); getBuffer().append(chars, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); String elementName = getElementName(localName, qName); if (elementName.equals("book")) { list.add(mBook); mBook = new Book(); } else if (elementName.equals("name")) { mBook.name = getBuffer().toString(); } else if (elementName.equals("price")) { mBook.price = getBuffer().toString(); } } } private ArrayList<Book> list = new ArrayList<Book>(); private class Book { String email; String name; String price; @Override public String toString() { return "name=" + name + "price=" + price; } }
Ce qui précède explique comment Android utilise DOM et SAXParserFactory pour analyser le contenu du fichier XML Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Ces derniers jours, Ice Universe n'a cessé de révéler des détails sur le Galaxy S25 Ultra, qui est largement considéré comme le prochain smartphone phare de Samsung. Entre autres choses, le fuyard a affirmé que Samsung prévoyait d'apporter une seule mise à niveau de l'appareil photo.

OnLeaks s'est désormais associé à Android Headlines pour offrir un premier aperçu du Galaxy S25 Ultra, quelques jours après une tentative infructueuse de générer plus de 4 000 $ auprès de ses abonnés X (anciennement Twitter). Pour le contexte, les images de rendu intégrées ci-dessous h

En plus d'annoncer deux nouveaux smartphones, TCL a également annoncé une nouvelle tablette Android appelée NXTPAPER 14, et sa taille d'écran massive est l'un de ses arguments de vente. Le NXTPAPER 14 est doté de la version 3.0 de la marque emblématique de panneaux LCD mats de TCL.

Le Vivo Y300 Pro vient d'être entièrement dévoilé et c'est l'un des téléphones Android de milieu de gamme les plus fins avec une grande batterie. Pour être exact, le smartphone ne fait que 7,69 mm d'épaisseur mais dispose d'une batterie de 6 500 mAh. C'est la même capacité que le lancement récent

Samsung n'a pas encore donné d'indications sur la date à laquelle il mettrait à jour sa série de smartphones Fan Edition (FE). Dans l’état actuel des choses, le Galaxy S23 FE reste l’édition la plus récente de la société, ayant été présentée début octobre 2023. Cependant, de nombreux

Ces derniers jours, Ice Universe n'a cessé de révéler des détails sur le Galaxy S25 Ultra, qui est largement considéré comme le prochain smartphone phare de Samsung. Entre autres choses, le fuyard a affirmé que Samsung prévoyait d'apporter une seule mise à niveau de l'appareil photo.

Le Redmi Note 14 Pro Plus est désormais officiel en tant que successeur direct du Redmi Note 13 Pro Plus de l'année dernière (375 $ sur Amazon). Comme prévu, le Redmi Note 14 Pro Plus est en tête de la série Redmi Note 14 aux côtés du Redmi Note 14 et du Redmi Note 14 Pro. Li

La marque sœur de OnePlus, iQOO, a un cycle de produits 2023-4 qui pourrait être presque terminé ; néanmoins, la marque a déclaré qu'elle n'en avait pas encore fini avec sa série Z9. Sa variante Turbo+ finale, et peut-être la plus haut de gamme, vient d'être annoncée comme prévu. T
