android 中 DOM解析xml

DOM方式解析文档,我们将解析后得到的数据显示在一个TextView中,代码示例:
public class ActivityMain extends Activity {
         
         @Override
         public voidonCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);
                   setContentView(R.layout.main);
                   TextViewresult = (TextView)this.findViewById(R.id.resultText);
                   //读取xml文件
                   List<User>userList = readXMLDOM();
                   //显示
                   StringBufferstrB = new StringBuffer();
                   for(Useru:userList){
                            strB.append(u.userId+","+u.userName+","+u.userAge+"\n");
                   }
                   result.setText(strB);
         }
         /**
          * 解析文档
          * @return 
          */
         privateList<User> readXMLDOM() {
                   InputStreamis = null;
                   List<User>userList = new ArrayList<User>();
                   //获取一个解析DOM树的工厂
                   DocumentBuilderFactoryfactory = DocumentBuilderFactory.newInstance();
                   try {
                            //读取raw目录的xml文件
                            is= getResources().openRawResource(R.raw.dom);
                            //创建DOM文档对象
                            DocumentBuilderbuilder = factory.newDocumentBuilder();
                            //加载XML文档,将XML文件解析为Document
                            Documentdom = builder.parse(is);
                            //获取DOM文档的根元素
                            Elementroot = dom.getDocumentElement();
                            //查找所有user节点列表
                            NodeListitems = root.getElementsByTagName("user");
                            for(int i = 0; i < items.getLength(); i++) {
                                     Useruser = new User();
                                     //获取user节点
                                     Elementnode = (Element) items.item(i);
                                     //获取user节点的id属性值
                                     user.userId= node.getAttribute("id");
                                     //获取user节点下的所有子节点
                                     NodeListchildsNodes = node.getChildNodes();
                                     for(int j = 0; j < childsNodes.getLength(); j++) {
                                               Node nodeChild = (Node)childsNodes.item(j);
                                               //判断是否为元素类型
                                               if(nodeChild.getNodeType() == Node.ELEMENT_NODE) {
                                                        ElementchildNode = (Element) nodeChild;
                                                        // 判断是否name元素
                                                        if("name".equals(childNode.getNodeName())) {
                                                                 //获取name元素的内容
                                                                 user.userName= childNode.getFirstChild().getNodeValue();
                                                        }else if ("age".equals(childNode.getNodeName())) {
                                                                 user.userAge= childNode.getFirstChild().getNodeValue();
                                                        }
                                               }
                                     }
                                     userList.add(user);
                            }
                   } catch(Exception e) {
                            e.printStackTrace();
                   }finally{
                            if(is!=null){
                                     try{
                                               //关闭输入流
                                              is.close();
                                     }catch (IOException e) {
                                               e.printStackTrace();
                                     }
                            }
                   }
                   returnuserList;
         }
}
从上面代码中我们分析下DOM解析XML步骤:
(1)读取xml文件获取输入流对象;
(2)创建DocumentBuilderFactory 实例,得到解析器的工厂类;
(3)通过DocumentBuilderFactory 创建DocumentBuilder文档解析器;
(4)parse(InputStreamis) 方法将文档内容装入解析器;
(5)然后获取文档的根结点(Element);
(6)然后从根结点中获取我们关注的所有子节点的列表(NodeList);
(7)最后根据节点名称获取我们需要的数据。

你可能感兴趣的:(android 中 DOM解析xml)