android如何使用DOM和SAXParserFactory来解析XML文件
对于以下的xml文件:
<?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>
这样来解析:
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; }
采用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; } }
以上就是android如何使用DOM和SAXParserFactory来解析XML文件的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

OnLeaks kini telah bekerjasama dengan Android Headlines untuk memberikan pandangan pertama pada Galaxy S25 Ultra, beberapa hari selepas percubaan gagal untuk menjana lebih daripada $4,000 daripada pengikut X (dahulunya Twitter). Untuk konteks, imej pemaparan yang dibenamkan di bawah h

Di samping mengumumkan dua telefon pintar baharu, TCL juga telah mengumumkan tablet Android baharu yang dipanggil NXTPAPER 14, dan saiz skrinnya yang besar adalah salah satu nilai jualannya. NXTPAPER 14 menampilkan versi 3.0 jenama tandatangan TCL panel LCD matte

Vivo Y300 Pro baru sahaja didedahkan sepenuhnya, dan ia merupakan salah satu telefon Android jarak pertengahan paling tipis dengan bateri yang besar. Tepatnya, telefon pintar ini hanya tebal 7.69 mm tetapi mempunyai bateri 6,500 mAh. Ini adalah kapasiti yang sama seperti yang dilancarkan baru-baru ini

Samsung belum menawarkan sebarang petunjuk lagi tentang bila ia akan mengemas kini siri telefon pintar Edisi Peminat (FE). Seperti sedia ada, Galaxy S23 FE kekal sebagai edisi terbaharu syarikat, telah dibentangkan pada awal Oktober 2023. Walau bagaimanapun, banyak

Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

Redmi Note 14 Pro Plus kini rasmi sebagai pengganti langsung kepada Redmi Note 13 Pro Plus tahun lepas (sekira $375 di Amazon). Seperti yang dijangkakan, Redmi Note 14 Pro Plus mengetuai siri Redmi Note 14 bersama Redmi Note 14 dan Redmi Note 14 Pro. Li

Jenama OnePlus iQOO mempunyai kitaran produk 2023-4 yang mungkin hampir tamat; Namun begitu, jenama itu telah mengisytiharkan bahawa ia belum selesai dengan siri Z9nya. Varian Turbo+yang terakhir, dan mungkin paling akhir, baru sahaja diumumkan seperti yang diramalkan. T
