在如今的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"));
- Element languages = document.getDocumentElement();
- NodeList nodeList = languages.getElementsByTagName("lan");
-
- for (int i = 0; i < nodeList.getLength(); i++) {
- Element lan = (Element) nodeList.item(i);
- text.append(lan.getAttribute("id") + " ");
- text.append(lan.getElementsByTagName("name").item(0).getTextContent() + " ");
- text.append(lan.getElementsByTagName("ide").item(0).getTextContent() + " ");
- 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();
- NodeList nodeList = languages.getElementsByTagName("lan");
-
- for (int i = 0; i < nodeList.getLength(); i++) {
- Element lan = (Element) nodeList.item(i);
- text.append(lan.getAttribute("id") + " ");
-
- NodeList childNodes = lan.getChildNodes();
- for (int j = 0; j < childNodes.getLength(); j++) {
- Node node = childNodes.item(j);
- if (node instanceof 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 。欢迎大家访问!