android dom解析相关理解

DOM解析XML 
DOM是Document Object Model的缩写,即文档对象模型.DOM解析器是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,而后对文档的操作都是在这个树状模型上完成.这个在内存中的文档是实际文档大小的几倍.好处是结构清晰,操作方便,坏处是耗费系统资源.要使用DOM方式来解析xml,需引入下面两个包: 
importjavax.xml.parsers.*;//包含DOM解析器和SAX解析器的具体实现 
import org.w3c.dom.*;//定义了W3C制定的DOM接口 
具体思路: 
*首先创建一个DocumentBuilderFactory实例, 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 

*利用DocumentBuilderFactory实例创建DocumentBuilder, 
DocumentBuilder builder = factory.newDocumentBuilder(); 
*然后加载xml文档(Document), 
Document doc = builder.parse(getAssets().open("xml/student.xml")); 
*然后获取文档的根节点(Element), 
Element root = doc.getDocumentElement(); 
*然后获取根节点中所有子节点的列表(NodeList), 
NodeListnodeList = root.getElementsByTagName("student"); 
*然后再获取子节点列表中需获取的节点. 
**************************************相关代码***************** 

 

 1 //student是一个实体类,里面有name,age参数,构造方法,和getter and setter方法,tostring输出; 
 2 public class DomParserActivity extends Activity { 
 3 private TextView mtextview; 
 4 private ListView mlistview; 
 5 @Override 
 6 protected void onCreate(Bundle savedInstanceState) { 
 7 
 8 super.onCreate(savedInstanceState); 
 9 setContentView(R.layout.domparser); 
10 mtextview = (TextView) findViewById(R.id.textView1); 
11 mlistview = (ListView) findViewById(R.id.listView1); 
12 mtextview.setText("dom解析xml"); 
13 List<Student> list = parserxml(); 
14 ArrayAdapter< Student> adapter = new ArrayAdapter<Student>(this,android.R.layout.simple_expandable_list_item_1,list); 
15 mlistview.setAdapter(adapter); 
16 
17 } 
18 private List<Student> parserxml() { 
19 List<Student> list = new ArrayList<Student>(); 
20 try { 
21 //获取工厂实例 
22 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
23 //获取解析器实例 
24 DocumentBuilder db; 
25 
26 db = dbf.newDocumentBuilder(); 
27 
28 //// 用解析器解析Xml, 放于src下面 
29 Document doc = db.parse(DomParserActivity.this.getClassLoader().getResourceAsStream("student.xml")); 
30 //获取Document根节点 
31 Element ele = doc.getDocumentElement(); 
32 //拿到某个标签的节点列表 
33 NodeList nodelist = ele.getElementsByTagName("student"); 
34 int length = nodelist.getLength(); 
35 Student stu = null; 
36 //遍历节点列表 
37 for(int i=0;i<length;i++){ 
38 stu = new Student(); 
39 Element stuele = (Element) nodelist.item(i); 
40     stu.setId(Integer.parseInt(stuele.getAttribute("id"))); 
41   //拿到<student>标签的子节点列表 
42     NodeList childlist = stuele.getChildNodes(); 
43     int childlength = childlist.getLength(); 
44   //遍历子节点列表 
45     for(int j=0;j<childlength;j++){ 
46     Node node = childlist.item(j); 
47    if(node.getNodeType()==Node.ELEMENT_NODE){ 
48      Element element = (Element) node; 
49      if("name".equals(element.getNodeName())){ 
50     stu.setName(element.getFirstChild().getNodeValue()); 
51     Log.i("TAG", ""+stu.getName()); 
52      } 
53      else if("age".equals(element.getNodeName())){ 
54     stu.setAge(Integer.valueOf(element.getAttribute("value"))); 
55     
56      } 
57      
58     } 
59    } 
60     list.add(stu); 
61 } 
62 } 
63 catch (ParserConfigurationException e) { 
64 // TODO Auto-generated catch block 
65 e.printStackTrace(); 
66 } catch (SAXException e) { 
67 // TODO Auto-generated catch block 
68 e.printStackTrace(); 
69 } catch (IOException e) { 
70 // TODO Auto-generated catch block 
71 e.printStackTrace(); 
72 } 
73 
74 
75 return list; 
76 
77 } 
78   
79 } 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。