转换xml格式的短信记录

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

<?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 Msgprivate 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()并不等于7     msg.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  晚安 妞


           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_43678748/article/details/84071586