Android中如何解析XML数据
2016-01-28 16:37
357 查看
在如今的Android的网络编程中,JSON数据解析和XML数据解析已经成为两个最主要的网络数据传输方式。本篇文章先来聊聊XML解析。
XML在Android开发中非常重要,UI设计主要就是用XML进行编写,在此不再赘述。在Android的网络编程中,XML的目的主要是传输数据,而不是显示数据。并且XML没有预定义的标签,没有像HTML中的<p>,<h1>这样的标签,而是由开发者自己定义的。下面先来解析一段简单的XML:
[html] view
plain copy
print?
<?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解析出来。实现的代码如下:
[java] view
plain copy
print?
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循环的实现。代码如下:
[java] view
plain copy
print?
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 。欢迎大家访问!
XML在Android开发中非常重要,UI设计主要就是用XML进行编写,在此不再赘述。在Android的网络编程中,XML的目的主要是传输数据,而不是显示数据。并且XML没有预定义的标签,没有像HTML中的<p>,<h1>这样的标签,而是由开发者自己定义的。下面先来解析一段简单的XML:
[html] view
plain copy
print?
<?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解析出来。实现的代码如下:
[java] view
plain copy
print?
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循环的实现。代码如下:
[java] view
plain copy
print?
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 。欢迎大家访问!
相关文章推荐
- android studio设置内存
- Android开发之启动页面Splash Screen
- android utf8转换
- Android Studio上的几个插件
- android 友盟社会化分享
- 获取新浪微博开发时的MD5签名
- Android Studio导入github下载的工程
- Android中设置ListView内容刷新问题
- Android-PullToRefresh onRefreshComplete()失效问题
- android 关于Location of the Android SDK has not been setup in the preferences的解决方法
- android插值器简单使用
- 对android:configChanges属性,一般认为有以下几点:
- Android Studio导入项目的几种方法
- Android组件(一)-Calendar、DataPickerDialog、PreferenceActivity、CoordinatorLayout
- Android开发使用的常见第三方框架
- 使用Json数据进行服务器与android端交互
- 使用baksmali和smali反编译和编译apk
- android 实现第一次进入程序的多个引导页
- Android------Intent用法大全
- Android------startActivityForResult的详细用法