Android解析xml文件获取数据练习
前几天单词app中,已经可以显示单词了,对比有道词典的单词表,主要是有单词备注的功能,可以进行联想记忆,而且程序占用空间小,没有太多的通知信息。
以前使用有道词典的单词保存了一些单词,有道里的单词可以导出到xml文件中
格式如下
<wordbook><item> <word>unveil</word><trans><![CDATA[vt. 使公诸于众,揭开;揭幕
vi. 除去面纱;显露
unveil: 揭露 | 使公诸于众 | 揭开]]></trans><phonetic><![CDATA[[ʌn'veɪl]]]></phonetic><tags></tags><progress>2</progress>
</item><item> <word>prominence</word><trans><![CDATA[n. 突出;显著;突出物;卓越
Prominence: 日珥 | 突出 | 显着]]></trans><phonetic><![CDATA[['prɒmɪnəns]]]></phonetic><tags></tags><progress>1</progress>
</item></wordbook>
考虑增加导入功能,读取单词xml获取数据保存进去
在java上进行xml解析练习
import javax.xml.parsers.*;
import org.w3c.dom.*;public class Test {public static void getDataFromXml(String fileName) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(fileName); NodeList wordList = doc.getElementsByTagName("item"); System.out.println("共有" + wordList.getLength() + "个word节点"); for (int i = 0; i < wordList.getLength(); i++) { if (i == 3){break;}Node aWord = wordList.item(i); Element elem = (Element) aWord; for (Node node = elem.getFirstChild(); node != null; node = node.getNextSibling()) { // System.out.println("node.getNodeType() = " + node.getNodeType()); if (node.getNodeType() == Node.ELEMENT_NODE) { String name = node.getNodeName(); if (name.equals("word") || name.equals("trans")){String value = node.getFirstChild().getNodeValue(); System.out.print(name + ":" + value + "\t"); }} } System.out.println(); } } catch (Exception e) { e.printStackTrace(); System.out.println(e); } } /*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("----------");getDataFromXml("D:\\2015\\06\\words.xml");}}
把解析方法移植到单词app中,出现错误, MalformedURLException: Protocol not found
解决方案,路径修改为 file:///mnt/sdcard/words.xml
即增加file://
/mnt/sdcard/words.xml 为xml文件保存的地方,即手机上打开 文件管理 所在的路径
//public void getDataFromXml(String fileName){Log.d("test614", fileName);DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(fileName); NodeList wordList = doc.getElementsByTagName("item"); System.out.println("共有" + wordList.getLength() + "个word节点");Log.d("test614", "共有" + wordList.getLength() + "个word节点");for (int i = 0; i < wordList.getLength(); i++) { Node aWord = wordList.item(i); Element elem = (Element) aWord; String wname = " ";String wtrans = " ";for (Node node = elem.getFirstChild(); node != null; node = node.getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE) { String name = node.getNodeName(); if (name.equals("word")){wname = node.getFirstChild().getNodeValue(); }if (name.equals("trans")){wtrans = node.getFirstChild().getNodeValue(); } } } if (!wname.equals(" ")) {this.insertStuInfo(wname, wtrans, " ");}} } catch (Exception e) { e.printStackTrace(); System.out.println(e); Log.d("test614", e.toString());} }
调用
getDataFromXml("file:///mnt/sdcard/words.xml");
//insert a record
//6-21
private void insertStuInfo(String word, String trans, String notes)
{
ContentValues values = new ContentValues();
values.put(StuInfoColumns.WORD_NAME, word);
values.put(StuInfoColumns.WORD_MEANING, trans);
values.put(StuInfoColumns.WORD_NOTES, notes);
getContentResolver().insert(StuInfoColumns.CONTENT_URI, values);
}
这样,就可以把xml里的单词写到数据库了
根据字母表排序的单词对出现大写字母优先于小写字母的现象,可以使用upper对排序条件进行修饰
增加解析tags内容后,发现如果内容为空,会出错
node.getFirstChild().getNodeValue()//will lead a nullPointer exception
解析方法的优化:
//public void getDataFromXml(String fileName){Log.d("test614", fileName);DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(fileName); NodeList wordList = doc.getElementsByTagName("item"); System.out.println("共有" + wordList.getLength() + "个word节点");Log.d("test614", "共有" + wordList.getLength() + "个word节点");for (int i = 0; i < wordList.getLength(); i++) { Node aWord = wordList.item(i); Element elem = (Element) aWord; String wname = " ";String wtrans = " ";String wnotes = " ";for (Node node = elem.getFirstChild(); node != null; node = node.getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE) { //if there is no value, continue//otherwise node.getFirstChild().getNodeValue()//will lead a nullPointer exceptionif (node.getFirstChild() == null){continue;}String name = node.getNodeName(); if (name.equals("word") ){ wname = node.getFirstChild().getNodeValue(); Log.d("test614", "word=" + wname);}else if (name.equals("trans")){//node.getNodeValue()wtrans = node.getFirstChild().getNodeValue(); Log.d("test614", "trans=" + wtrans);}else if (name.equals("tags")){wnotes = node.getFirstChild().getNodeValue();if (wnotes == null){Log.d("test614", "tags=null");}else{Log.d("test614", "tags=" + wnotes);}}} } if (wname!= null && !wname.equals(" ")) {Log.d("test614", "if (!wname.equals() " + wname);this.insertStuInfo(wname, wtrans, wnotes);}} } catch (Exception e) { e.printStackTrace(); System.out.println(e); Log.d("test614", e.toString());} }
Android解析xml文件获取数据练习相关推荐
- C#解析xml文件获取中国的省市县地区名称和zipcode编号
全栈工程师开发手册 (作者:栾鹏) c#教程全解 C#解析xml文件获取中国的省市县名称获zipcode编号.需要提交加载xml文件.获取市级城市时,需要提供省级名称.获取县级城市市需要提供省级和市级 ...
- Android解析XML文件
XML文件和获取XML值 XML文件样例 <?xml version="1.0" encoding="utf-8"?> <citys> ...
- 如何解析xml报文获取数据集合
场景:最近业务上需要处理xml的返回结果,由于处理的xml是一棵比较深的树,我们需要解析到底层进行数据收集 1.引入依赖 <!-- 解析xml方法--><dependency> ...
- 【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
文章目录 一.创建 XmlParser 解析器 二.获取 Xml 文件中的节点 三.获取 Xml 文件中的节点属性 四.完整代码示例 一.创建 XmlParser 解析器 创建 XmlParser 解 ...
- FTP服务器获取文件,并解析GRB2文件获取数据
1.连接FTP服务器 package Grib2Test; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons ...
- android解析xml文件思维导图,xmind思维导图格式转化xml格式
前期准备 1 xmind 文件 2 python环境 3 pip 步骤: 1 升级pip:python3 -m pip install --upgrade pip 2 安装插件:pip3 instal ...
- python解析XML文件报错 entity not defined Entity ndash not defined
报错 在处理数据集时需要解析xml文件获取需要的数据,一开始采用python自带的xml模块来做,即xml.dom.minidom,然后报错 entity not defined 也没显示是在xml文 ...
- Android实例RSS客户端开发(2)--解析XML文件
一 介绍完RSS之后,下面开始讲解如何解析RSS文件.因为RSS是基于XML的,所以我们就直接介绍如何解析XML文件. 解析XML的方式有很多种,大家比较熟悉的可能就是DOM解析. DOM(文件对象模 ...
- Android解析xml的方法,Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
最新文章
- VUE的本地应用-V- on
- 接口 500_Yamaha Sonogenic SHS-500肩背键盘 全方位测评
- python爬虫数据提取,Python 信息提取-爬虫,爬虫提取数据, import re
- python正则表达式怎么表示零个或多个字符_VBA中正则表达式之分组
- layui横向时间线_用打火机或烟头烧羽毛球拍线坏处多
- IPQ4019/QCA9531/MT7628/MT7621系嵌入式无线双频AP核心模块选型探讨
- 信用证,保理,支付宝的模式和区别
- 小程序 跳转到腾讯文档小程序
- 发布个小软件给大伙玩玩
- C语言——判断一个数是否为素数(2种方法)
- chrome 插件开发中的热更新问题
- 动态规划练习一 18:买书
- 微信公众号笔记(一)
- ASCLL UTF-8 GBK URL编码
- Web模式使用RabbitMQ
- Win10下WinRAR“拒绝访问”解决+获取everyone权限
- mac mini 蓝牙_Mac Mini
- 牛客网--15894--WWX的520
- ubuntu18 防火墙关闭_ubuntu18开启/关闭防火墙
- 原来Vinted注册这么简单!Vinted注册保姆级教程分享