前几天单词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文件获取数据练习相关推荐

  1. C#解析xml文件获取中国的省市县地区名称和zipcode编号

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 C#解析xml文件获取中国的省市县名称获zipcode编号.需要提交加载xml文件.获取市级城市时,需要提供省级名称.获取县级城市市需要提供省级和市级 ...

  2. Android解析XML文件

    XML文件和获取XML值 XML文件样例 <?xml version="1.0" encoding="utf-8"?> <citys> ...

  3. 如何解析xml报文获取数据集合

    场景:最近业务上需要处理xml的返回结果,由于处理的xml是一棵比较深的树,我们需要解析到底层进行数据收集 1.引入依赖 <!-- 解析xml方法--><dependency> ...

  4. 【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )

    文章目录 一.创建 XmlParser 解析器 二.获取 Xml 文件中的节点 三.获取 Xml 文件中的节点属性 四.完整代码示例 一.创建 XmlParser 解析器 创建 XmlParser 解 ...

  5. FTP服务器获取文件,并解析GRB2文件获取数据

    1.连接FTP服务器 package Grib2Test; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons ...

  6. android解析xml文件思维导图,xmind思维导图格式转化xml格式

    前期准备 1 xmind 文件 2 python环境 3 pip 步骤: 1 升级pip:python3 -m pip install --upgrade pip 2 安装插件:pip3 instal ...

  7. python解析XML文件报错 entity not defined Entity ndash not defined

    报错 在处理数据集时需要解析xml文件获取需要的数据,一开始采用python自带的xml模块来做,即xml.dom.minidom,然后报错 entity not defined 也没显示是在xml文 ...

  8. Android实例RSS客户端开发(2)--解析XML文件

    一 介绍完RSS之后,下面开始讲解如何解析RSS文件.因为RSS是基于XML的,所以我们就直接介绍如何解析XML文件. 解析XML的方式有很多种,大家比较熟悉的可能就是DOM解析. DOM(文件对象模 ...

  9. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

最新文章

  1. VUE的本地应用-V- on
  2. 接口 500_Yamaha Sonogenic SHS-500肩背键盘 全方位测评
  3. python爬虫数据提取,Python 信息提取-爬虫,爬虫提取数据, import re
  4. python正则表达式怎么表示零个或多个字符_VBA中正则表达式之分组
  5. layui横向时间线_用打火机或烟头烧羽毛球拍线坏处多
  6. IPQ4019/QCA9531/MT7628/MT7621系嵌入式无线双频AP核心模块选型探讨
  7. 信用证,保理,支付宝的模式和区别
  8. 小程序 跳转到腾讯文档小程序
  9. 发布个小软件给大伙玩玩
  10. C语言——判断一个数是否为素数(2种方法)
  11. chrome 插件开发中的热更新问题
  12. 动态规划练习一 18:买书
  13. 微信公众号笔记(一)
  14. ASCLL UTF-8 GBK URL编码
  15. Web模式使用RabbitMQ
  16. Win10下WinRAR“拒绝访问”解决+获取everyone权限
  17. mac mini 蓝牙_Mac Mini
  18. 牛客网--15894--WWX的520
  19. ubuntu18 防火墙关闭_ubuntu18开启/关闭防火墙
  20. 原来Vinted注册这么简单!Vinted注册保姆级教程分享

热门文章

  1. Kali渗透测试之端口扫描1——UDP、TCP、僵尸扫描、隐蔽扫描
  2. 北京航空航天大学软件学院2021年保研复试流程介绍+经验分享
  3. 超详细版本vue+capacitor(自定义capacitor插件)编写移动端应用
  4. 使用Python进行立体几何和立体校正的综合教程
  5. 宣传片制作的十大步骤
  6. 微型计算机原理第三版考试,微机原理考试试题及答案分析
  7. Ngnix Rtmp详解
  8. 毕业设计—共享图书小程序3.0 全新UI
  9. jpg转bmp操作方法
  10. oracle asm 状态,ASM 规划ASM DISK GROUP、查看asm 磁盘当前状态等