<?xml version="1.0" encoding="UTF-8"?>
<SMSRecord>
    <SMS>
        <Type>2</Type>
        <Status>0</Status>
        <IsRead>1</IsRead>
        <Address>18712345678</Address>
        <Date>2015-11-17 00:04:40</Date>
        <Subject></Subject>
        <Body>晚安 妞</Body>
    </SMS>
    <SMS>
        <Type>1</Type>
        <Status>0</Status>
        <IsRead>1</IsRead>
        <Address>18712345678</Address>
        <Date>2015-11-17 00:04:01</Date>
        <Subject></Subject>
        <Body>(&gt;^ω^&lt;)还好啦,你也早睡,晚安~</Body>
    </SMS>
    <SMS>
        <Type>2</Type>
        <Status>0</Status>
        <IsRead>1</IsRead>
        <Address>18712345678</Address>
        <Date>2015-11-17 00:03:23</Date>
        <Subject></Subject>
        <Body>哈哈 想名字这么高难度的事 还是交给你吧 另外 赶紧睡觉! 你今天也是累了一天了</Body>
    </SMS>

</SMSRecord>

今天把手机里和老婆的短信记录导出了,是xml格式的,如上所示

type是2的表示是我自己发出去的

type是1的表示是媳妇发给我的

这种格式的看着有点费劲呀,看着不爽呀!

于是就有了下面的代码

package prac;import java.io.*;
import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;public class XMLReaderTest {public static void main(String args[]) {Element element = null;// 可以使用绝对路劲/Practice/src/prac/File f = new File("src/prac/Sms_QQPhoneManager(2015-11-18).xml");// documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件)DocumentBuilder db = null;DocumentBuilderFactory dbf = null;try {// 返回documentBuilderFactory对象dbf = DocumentBuilderFactory.newInstance();// 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象db = dbf.newDocumentBuilder();// 得到一个DOM并返回给document对象Document dt = db.parse(f);// 得到一个elment根元素element = dt.getDocumentElement();// 获得根节点System.out.println("根元素:" + element.getNodeName());// 获得根元素下的子节点NodeList childNodes = element.getChildNodes();// 遍历这些子节点List<Msg> msgs=new ArrayList<>();Msg msg=null;for (int i = 0; i < childNodes.getLength(); i++) {msg=new Msg();// 获得每个对应位置i的结点Node node1 = childNodes.item(i);if ("SMS".equals(node1.getNodeName())) {// 获得<Accounts>下的节点NodeList nodeDetail = node1.getChildNodes();// 遍历<Accounts>下的节点for (int j = 0; j < nodeDetail.getLength(); j++) {// 获得<Accounts>元素每一个节点Node detail = nodeDetail.item(j);if ("Type".equals(detail.getNodeName())) {if (detail.getTextContent().equals("2")) {msg.setName("我");}else {msg.setName("老婆");}}if ("Date".equals(detail.getNodeName())) msg.setDate(detail.getTextContent());if ("Body".equals(detail.getNodeName())) msg.setText(detail.getTextContent());}msgs.add(msg);}}//为什么要逆序 大家明白了么?for (int i=msgs.size()-1;i>-1 ; i--) {System.out.println(msgs.get(i).getName()+" "+msgs.get(i).getDate()+"  "+msgs.get(i).getText());}} catch (Exception e) {e.printStackTrace();}}}class Msg{private String name;private String date;private String text;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getText() {return text;}public void setText(String text) {this.text = text;}}

后来觉得麻烦就改成了下面这个样子:

public static void main(String args[]) {Element element = null;// 可以使用绝对路劲/Practice/src/prac/File f = new File("src/prac/Sms_QQPhoneManager(2015-11-18).xml");// documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件)DocumentBuilder db = null;DocumentBuilderFactory dbf = null;try {// 返回documentBuilderFactory对象dbf = DocumentBuilderFactory.newInstance();// 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象db = dbf.newDocumentBuilder();// 得到一个DOM并返回给document对象Document dt = db.parse(f);// 得到一个elment根元素element = dt.getDocumentElement();// 获得根节点System.out.println("根元素:" + element.getNodeName());// 获得根元素下的子节点NodeList childNodes = element.getChildNodes();// 遍历这些子节点List<Msg> msgs=new ArrayList<>();Msg msg=null;int length=childNodes.getLength();//这length 并不是来往短信的条目数for (int i = 0; i < length; i++) {msg=new Msg();// 获得每个对应位置i的结点Node node1 = childNodes.item(i);if ("SMS".equals(node1.getNodeName())) {// 获得<Accounts>下的节点NodeList nodeDetail = node1.getChildNodes();//nodeDetail里就是Type date等等//一条短信有type body等7个字段 但是nodeDetail.getLength()并不等于7msg.setDate(nodeDetail.item(9).getTextContent());if (nodeDetail.item(1).getTextContent().equals("2")) {msg.setName("我");}else {msg.setName("老婆");}msg.setText(nodeDetail.item(13).getTextContent());msgs.add(msg);}}//为什么要逆序 大家明白了么?for (int i=msgs.size()-1;i>-1 ; i--) {System.out.println(msgs.get(i).getName()+" "+msgs.get(i).getDate()+"  "+msgs.get(i).getText());}} catch (Exception e) {e.printStackTrace();}}

运行结果

我 2015-11-17 00:03:23  哈哈 想名字这么高难度的事 还是交给你吧 另外 赶紧睡觉! 你今天也是累了一天了
老婆 2015-11-17 00:04:01  (>^ω^<)还好啦,你也早睡,晚安~
我 2015-11-17 00:04:40  晚安 妞

转换xml格式的短信记录相关推荐

  1. android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...

    [实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...

  2. android 手机误删短信恢复软件,误删除短信恢复大师 for android v4.1 安卓版 恢复Android手机上误删除的短信记录的软件...

    误删除短信恢复大师是一款用户恢复Android手机上误删除的联系人信息.通话记录和短信记录的软件,用户恢复出来亦可以直接恢复到手机数据库中! 误删除短信恢复大师使用前提条件- 手机需要获取root权限 ...

  3. Andro联系人短信记录读取

    联系人短信记录读取 在完成通讯录的消息界面时,需要读取联系人的短信记录 具体过程如下: 首先是权限处理 <uses-permission android:name="android.p ...

  4. unity向服务器发送xml文件格式,Unity读取Excel文件转换XML格式文件的方法

    Unity读取Excel文件转换XML格式文件的方法 发布时间:2020-06-23 09:34:33 来源:亿速云 阅读:107 作者:清晨 不懂Unity读取Excel文件转换XML格式文件的方法 ...

  5. java 转换xml格式的doc或docx文档为docx以及docx转PDF

    转换xml格式的doc或docx文档为docx import org.docx4j.Docx4J; import org.docx4j.openpackaging.packages.Wordproce ...

  6. 安卓的短信记录导入苹果_如何将安卓手机短信导入到iphone(未越狱)

    展开全部 一.安卓手机短信导出 首先在安卓手机安装QQ同步助手,登陆后点击"更多",选择"备份至网络": 在电脑上62616964757a686964616fe ...

  7. android删除短信记录,android 4.4 以上删除短信的方法

    android 4.4之后非默认的短信应用已经没有办法删除短信了.像以前那样用如下方法是不会没法删除短信的(即使在xml中配置了短信的读写权限),同时也不会有报错或其他提示. 但通过打印可以看到上述代 ...

  8. android 获取通话记录对应卡槽,短信记录对应卡槽

    最新公司有需求 要求屏蔽监听插入双卡后的用户指定一张卡,找了半天资料现在总结一下 1.获取通话记录对应卡槽 通话记录数据库(content://call_log/calls)中有存字段simid Ur ...

  9. Android6.0 源码添加黑名单拦截电话和短信记录

    [目标] 在上一篇 Android6.0 源码增加黑名单功能 的基础上增加黑名单和短信拦截记录 [实现] 黑名单数据库和拦截记录数据库上一篇已经增加完成,这就需要我们在电话和短信分发的地方去判断号码是 ...

最新文章

  1. jtoken判断是否包含键_c#-确定JToken是否为叶子
  2. Hadoop: MapReduce2的几个基本示例
  3. yarn资源参数配置
  4. c#基础知识梳理(四)
  5. 2019 GDUT Rating Contest II : A. Taming the Herd
  6. webgis从基础到开发实践_ArcGIS API For Javascript 开发笔记(四)
  7. IT 实力较量:决战超级数据中心之巅
  8. JSP 九大内置对象详解
  9. 万测试验机软件,万测TestStar®新秀®100kN微机控制电子万能试验机
  10. 关于键盘事件对象code值
  11. 美国散户从90%降到6%,他们是如何被“消灭”的?
  12. ERP能力计划与排产
  13. 平面变压器的设计(翻译)(3)
  14. seo如何优化一个网站
  15. Android仿Qzone底部导航栏加号弹出菜单
  16. 不学好数学也想当数据科学家?不存在的
  17. 【Linux】系统安装
  18. C语言中 - 是什么意思?
  19. 迪文DWIN串口屏的使用经验分享(最新添加了T5L新产品体验)
  20. 写轮眼常见的一些问题

热门文章

  1. 认知科学和认知神经科学_设计师认知科学阅读清单
  2. JQuery dataTable 扩展+Ajax Post,Get一些基本操作(二)
  3. 【微信小程序模板】可以用微信小程序模板制作小程序吗?
  4. [附源码]java毕业设计基于的高校学生考勤管理系统
  5. Java 使用poi-tl下载Word
  6. 正斜杠“/“和反斜杠“\“的区别
  7. oracle 中递归查询的使用
  8. clip-summary
  9. matplotlib画图-折线/散点/柱状/条形图
  10. [机器学习] 信用评分卡中的应用 | 干货