在如今的Android的网络编程中,JSON数据解析和XML数据解析已经成为两个最主要的网络数据传输方式。本篇文章先来聊聊XML解析。

XML在Android开发中非常重要,UI设计主要就是用XML进行编写,在此不再赘述。在Android的网络编程中,XML的目的主要是传输数据,而不是显示数据。并且XML没有预定义的标签,没有像HTML中的<p>,<h1>这样的标签,而是由开发者自己定义的。下面先来解析一段简单的XML:

<?xml version="1.0" encoding="utf-8"?><languages>    <lan id="1">        <name>Java</name>        <ide>Eclipse</ide>    </lan>    <lan id="2">        <name>C++</name>        <ide>Visual Studio</ide>    </lan></languages>

我需要把每一个元素的id属性,name和ide解析出来。实现的代码如下:

        try {            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();            DocumentBuilder builder = factory.newDocumentBuilder();            Document document = builder.parse(getAssets().open("languages.xml"));//我把需要解析的XML放到项目的assets文件夹下;一个XML文件相当于一个document;            Element languages = document.getDocumentElement();//这是获取根目录,如languages ;这就是一个元素Element;方法getDocumentElement()就是获取xml的根目录;            NodeList nodeList = languages.getElementsByTagName("lan");//getElementsByTagName()方法就是根据标签名称来获取一个元素下的其他元素;            for (int i = 0; i < nodeList.getLength(); i++) {//在一个TextView中进行显示;                Element lan = (Element) nodeList.item(i);                text.append(lan.getAttribute("id") + "  ");//获得每一个Element的属性;                text.append(lan.getElementsByTagName("name").item(0).getTextContent() + "  ");//获得name元素值;               text.append(lan.getElementsByTagName("ide").item(0).getTextContent() + "  ");//获得ide元素值;                text.append("\n");//换行;            }        } catch (IOException e) {            e.printStackTrace();        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (SAXException e) {            e.printStackTrace();        }
最后的实现结果截屏所示: 。

这样解析xml的任务基本就完成了,但是在解析<lan>标签中的元素时,显得不是很聪明,如果元素太多,代码显得很冗余。下面使用两层for循环的实现。代码如下:

 try {            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();            DocumentBuilder builder = factory.newDocumentBuilder();            Document document = builder.parse(getAssets().open("languages.xml"));            Element languages = document.getDocumentElement();//这是获取根目录,如Languages;这就是一个元素Element;            NodeList nodeList = languages.getElementsByTagName("lan");            for (int i = 0; i < nodeList.getLength(); i++) {                Element lan = (Element) nodeList.item(i);                text.append(lan.getAttribute("id") + "  ");//获得每一个Element的属性;                NodeList childNodes = lan.getChildNodes();//获取<lan>标签下的子元素,是一个节点列表;                for (int j = 0; j < childNodes.getLength(); j++) {//根据子元素的数量进行遍历;                    Node node = childNodes.item(j);//每一个子元素都是一个item,也可以理解为一个node;                    if (node instanceof Element) {//判断这个node是否是一个Element元素,是的话进行打印;                        text.append(node.getTextContent() + "  ");                    }                }                text.append("\n");            }        } catch (IOException e) {            e.printStackTrace();        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (SAXException e) {            e.printStackTrace();        }

最后实现结果截屏如下:


。也能成功实现XML解析。


github主页:https://github.com/chenyufeng1991 。欢迎大家访问!


更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. android上一些方法的区别和用法的注意事项
  3. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  4. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  5. android 获取唯一标识
  6. android拍照与读取相册
  7. Android(安卓)热点开关状态的判断和获取热点ssid
  8. Android软键盘适配问题
  9. Android(安卓)P SystemUI之StatusBar UI布局status_bar.xml解析

随机推荐

  1. Android: Downloading the Google USB Dr
  2. Android(安卓)Bluedroid 结构
  3. 获取Netflix ESN
  4. 使用 ViewGroup 自定义 SlidingLayout
  5. ListView的优化
  6. Android(安卓)Studio 1.5错误
  7. 安卓指纹操作DEMO
  8. 40个android的商业模式
  9. android eclipse classpath backup
  10. Android(安卓)NestScrollView 监听滑动