xml转换成vcf 魅族手机通讯录Contact.xml备份在flyme上的恢复(Java/C#实现xml转vCard)

分类:杂谈| 发布:佚名| 查看:3286 | 发表时间:2014/6/10

上一篇的备份M9数据到SD卡上,研究了一下才发现,之前备份了通讯录是在手机的Backup文件夹下,文件Contact/Contact.xml,而flyme不再支持Contact.xml的恢复。但是flyme支持vCard格式(*.vcf)导入。

对于一只程序猿来说,解决这个问题的方法必须是自己写程序。

于是研究了一下魅族通讯录备份文件Contact.xml和vCard(vcf)格式。

 在线转换地址:xml转换vcf

Contact.xml:

01<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
02<ContactTable>
03<Product>M9</Product>
04<SoftwareVersion>1.0.1</SoftwareVersion>
05<Contact>
06<FileAs>郑州网建</FileAs>
07<FirstName>郑州网建</FirstName>
08<DisplayName>郑州网建</DisplayName>
09<PhoneElement IsPrimary="1" Value="15100000000" Type="0" />
10</Contact>
11<Contact>
12<FileAs>李四</FileAs>
13<FirstName>李四</FirstName>
14<DisplayName>李四</DisplayName>
15<PhoneElement IsPrimary="1" Value="15155555555" Type="0" />
16</Contact>
17</ContactTable>

 

vCard:

01BEGIN:VCARD
02VERSION:2.1
03FN:郑州网建
04TEL;CELL:15100000000
05END:VCARD
06BEGIN:VCARD
07VERSION:2.1
08FN:李四
09TEL;CELL:15155555555
10END:VCARD

 

Contact.xml转vcf文件(Java):

 

01public static void main(String[] args) throws DocumentException, IOException
02    {
03       // DOM4J读取Contact.xml文件
04     SAXReader reader = new SAXReader();
05     Document document = reader.read(new File("H:\\Backup\\20130422200137M9\\Contact\\Contact.xml"));
06                Element root = document.getRootElement();
07               // 联系人List
08      List<?> contacts = root.elements("Contact");
09              // vcf文件内容
10      StringBuilder sb = new StringBuilder();
11             // 遍历xml中的每个联系人,往vcf字符串中追加
12      for(Object contactObj : contacts)
13       {
14           Element eleContact = (Element) contactObj;
15                      String name = eleContact.elementText("DisplayName");
16            String number = eleContact.element("PhoneElement").attribute("Value").getValue();
17                       sb.append("BEGIN:VCARD\nVERSION:2.1\n");
18            sb.append("FN:");
19           sb.append(name);
20            sb.append("\nTEL;CELL:");
21           sb.append(number);
22          sb.append("\nEND:VCARD\n");
23     }
24               // 字符串写入vcf文件
25       FileUtils.writeStringToFile(new File("H:\\test.vcf"), sb.toString(), "utf-8");
26  }  

 

上面的代码需要两个jar文件:dom4j-1.6.1.jar和commons-io-2.4.jar。

 

最后把生成的vcf文件拷贝到手机中,在手机中打开这个vcf文件,就可以恢复以前所有的联系人了。

 

由于vCard文件比较通用,所以上面的代码应该还能实现魅族的Contact.xml备份导入联系人到魅族MX或者其他各种支持vCard的手机中。

在线转换地址:xml转换vcf

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/archives/1189.html