Android中如何解析XML数据
来源:互联网 发布:在国内名校就读 知乎 编辑:程序博客网 时间:2024/05/25 21:35
在如今的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解析。
2 0
- Android中如何解析XML数据
- Android中如何解析XML数据
- Android中XML数据解析
- Android中XML数据解析
- Android中XML数据解析
- Android中Xml数据存储与解析
- android中如何解析XML文件
- Android---解析XML数据
- Android 解析XML数据
- Android XML数据解析
- Android XML数据解析
- android解析XML数据
- android XML数据解析
- Android解析xml数据
- Android解析XML数据
- android 如何解析XML
- Android中如何解析JSON数据
- Android中如何解析JSON数据
- PAT 数据结构 01-复杂度1. 最大子列和问题(20)
- CocoaPods简单使用
- 使用 Cordova(PhoneGap)构建Android程序
- 悟空学Linux专栏----第26篇
- PHP中的异常处理
- Android中如何解析XML数据
- JDBC中No operations allowed after connection closed
- Notepad++调试运行Python脚本方法
- AndroidManifest中android:exported="false"
- MyEclipse 打开Struts配置文件时出错
- GetPrivateProfileString函数--INI配置文件
- Remove Linked List Elements
- 捷登为理芙宝品牌设计的视觉识别系统
- 数据库的最简单实现