Next, we will introduce Dom parsing in this chapter, Because Dom is a lot of parser used in J2EE. The parsing method here is the same as that of J2EE, the specific style is the same as the style in the following article.
<? Xml version = "1.0" encoding = "UTF-8"?>
<Persons>
<Person id = "1">
<Status> big brother </status>
<Name> Sun Wukong </name>
<Tool> golden hoop </tool>
<Number> killed 50 monsters </number>
</Person>
<Person id = "2">
<Status> Second Brother </status>
<Name> pig Bajie </name>
<Tool> nine-tooth dingtalk </tool>
<Number> killed 40 monsters </number>
</Person>
<Person id = "3">
<Status> three younger siblings </status>
<Name> Sha monk </name>
<Tool> demon master pin </tool>
<Number> killed 30 monsters </number>
</Person>
</Persons>
For other data or styles, see the following tutorial.
Android [intermediate tutorial] Chapter 5 PULL Parser for XML Parsing
Let's look at the code at the resolution:
Import java. io. InputStream;
Import java. util. ArrayList;
Import java. util. List;
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;
Public class DomHandler
{
Private InputStream input;
Private List <Person> persons;
Private Person person;
Public DomHandler ()
{
}
Public DomHandler (InputStream input)
{
This. input = input;
}
Public void setInput (InputStream input)
{
This. input = input;
}
Public List <Person> getPersons (){
Persons = new ArrayList <Person> ();
Try
{
// Create a Dom parser using the Dom factory Method
DocumentBuilder builder = DocumentBuilderFactory. newInstance (). newDocumentBuilder ();
Document document = builder. parse (input );
Element element = document. getDocumentElement ();
// Obtain the node list of the node <person>
NodeList personNodes = element. getElementsByTagName ("person ");
// Node length
Int length = personNodes. getLength ();
For (int I = 0; I <length; I ++ ){
// Obtain the <person> node Element
Element personElement = (Element) personNodes. item (I );
Person = new Person ();
// Obtain the id attribute value in <person id = "1">
Person. setId (personElement. getAttribute ("id "));
// Continue down to obtain the subnode list, such as <status> <name>
NodeList childnodes = personElement. getChildNodes ();
Int len = childnodes. getLength ();
For (int j = 0; j <len; j ++ ){
// If the child node is an element node
If (childnodes. item (j). getNodeType () = Node. ELEMENT_NODE ){
// Obtain the node name
String nodeName = childnodes. item (j). getNodeName ();
// Obtain the node Value
String nodeValue = childnodes. item (j). getFirstChild (). getNodeValue ();
If ("status". equals (nodeName )){
Person. setStatus (nodeValue );
}
If ("name". equals (nodeName )){
Person. setName (nodeValue );
}
If ("tool". equals (nodeName )){
Person. setTool (nodeValue );
}
If ("number". equals (nodeName )){
Person. setNumber (nodeValue );
}
}
} // End for j
Persons. add (person );
} // End for I
Return persons;
} Catch (Exception e)
{
E. printStackTrace ();
}
Return null;
}
}
Then the code of the Activity is:
Import java. io. File;
Import java. io. FileInputStream;
Import java. util. ArrayList;
Import java. util. HashMap;
Import java. util. List;
Import java. util. Map;
Import android. app. Activity;
Import android. OS. Bundle;
Import android. OS. Environment;
Import android. widget. ListView;
Import android. widget. SimpleAdapter;
Public class PullActivity extends Activity
{
Private ListView listView;
Private SimpleAdapter adapter;
@ Override
Protected void onCreate (Bundle savedInstanceState)
{
// TODO Auto-generated method stub
Super. onCreate (savedInstanceState );
SetContentView (R. layout. xml_handler );
ListView = (ListView) findViewById (R. id. xml_list );
Try
{
// Adaptive Method
GetAdapter ();
} Catch (Exception e)
{
E. printStackTrace ();
}
ListView. setAdapter (adapter );
}
// Custom adaptation method
Private void getAdapter () throws Exception
{
List <Map <String, String> lists = new ArrayList <Map <String, String> ();
// This part is used for testing.
File SD_Files = Environment. getExternalStorageDirectory ();
String file_path = SD_Files.getName () + File. separator + "persons. xml ";
// PULL parsing document
// FileInputStream input = new FileInputStream (new File (file_path ));
// PullHandler pullHandler = new PullHandler (input );
// List <Person> persons = pullHandler. getPersons ();
// SAX parsing document
// FileInputStream FCM = new FileInputStream (new File (file_path ));
// SAXParser parser = SAXParserFactory. newInstance (). newSAXParser ();
// SaxHandler saxHandler = new SaxHandler ();
// Parser. parse (FCM, saxHandler );
// List <Person> persons = saxHandler. getPersons ();
// Dom parsing document
FileInputStream FCM = new FileInputStream (new File (file_path ));
DomHandler domHandler = new DomHandler (SOx );
List <Person> persons = domHandler. getPersons ();
// Convert the data in persons to ArrayList <Map <String, String>, because SimpleAdapter uses this type of data for adaptation.
Map <String, String> map;
For (Person p: persons ){
Map = new HashMap <String, String> ();
Map. put ("id", p. getId ());
Map. put ("status", p. getStatus ());
Map. put ("name", p. getName ());
Map. put ("tool", p. getTool ());
Map. put ("number", p. getNumber ());
Lists. add (map );
}
// Key in HashMap <String, String>
String [] from = {"id", "status", "name", "tool", "number "};
// Control ID in list_item.xml
Int [] to = {R. id. item_id, R. id. item_status, R. id. item_name, R. id. item_tool, R. id. item_number };
Adapter = new SimpleAdapter (this, lists, R. layout. handler_list_item, from, );
}
}
In fact, Dom is rarely used in Android, mainly considering performance issues. After all, mobile phones are no better than servers or computers.
In the next chapter, we will introduce the Json parsing method. I hope you will learn it carefully.
Haha, the long holiday in October will soon end, and I have to work hard and learn again. Thank you.
From: kangkangz4 Column