json数据生成xml文档
2015-06-08 15:27
471 查看
如何将json数据生成xml文档
今天在工作遇到了一个没有做过的问题并不说难做,只是一直没遇到过这种需求,需要将网络获取的json数据生成xml文档,再由文档来解析,好了废话不说下面我们来看看怎么做
第一是由json数据生成对象类,将数据存入对象,举例
public class CityModle { private String parentId; private String cityname; private String cityCode; public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public String getCityname() { return cityname; } public void setCityname(String cityname) { this.cityname = cityname; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } }
第二将网络获取的json数据解析放入对象中,这个解析的方法我就不多说了相信大家看到这篇文章数据早以准备好了
第三步也是最重要的建立生成xml的帮助工具类我为大家贴出代码
public class CreateCityXML { private Context context; public CreateCityXML(Context context) { this.context = context; } //生成所需xml文档 public boolean createADXML(List<CityModle> data, String localDir) { boolean bFlag = false; SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); String strTmpName = sDateFormat.format(new java.util.Date()) + ".xml"; FileOutputStream fileos = null; File newXmlFile = new File(localDir + strTmpName); System.out.println(localDir + strTmpName); try { if (newXmlFile.exists()) { bFlag = newXmlFile.delete(); } else { bFlag = true; } if (bFlag) { if (newXmlFile.createNewFile()) { fileos = new FileOutputStream(newXmlFile); XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(fileos, "UTF-8"); serializer.startDocument("UTF-8", null); serializer.startTag(null, "City"); for (CityModle ad : data) { serializer.startTag(null, "Citychar"); serializer.attribute(null, "id", ad.getParentId()); serializer.startTag("", "cityname"); serializer.text(ad.getCityname()); serializer.endTag("", "cityname"); serializer.startTag("", "cityCode"); serializer.text(ad.getCityCode()); serializer.endTag("", "cityCode"); // serializer // .attribute(null, "cityName", ad.getCityname()); // serializer // .attribute(null, "cityCode", ad.getCityCode()); serializer.endTag(null, "Citychar"); } serializer.endTag(null, "City"); serializer.endDocument(); serializer.flush(); fileos.close(); } } } catch (Exception e) { } return bFlag; } /** * PULL方式获取XML文件内容 * * @param inStream * @return * @throws Throwable */ public List<CityModle> getCitys(InputStream inStream) throws Throwable { //InputStream open = context.getResources().getAssets().open("citys.xml"); List<CityModle> cityModles = null; CityModle cityModle = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inStream, "UTF-8"); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) {// 判断文件是否是文件的结尾,END_DOCUMENT文件结尾常量 switch (eventType) { case XmlPullParser.START_DOCUMENT:// 文件开始,START_DOCUMENT文件开始开始常量 cityModles = new ArrayList<CityModle>(); break; case XmlPullParser.START_TAG:// 元素标签开始,START_TAG标签开始常量 String name = parser.getName(); if ("Citychar".equals(name)) { cityModle = new CityModle(); cityModle.setParentId(parser.getAttributeValue(0)); } if (cityModle != null) { if ("cityname".equals(name)) { cityModle.setCityname(parser.nextText()); } if ("cityCode".equals(name)) { cityModle.setCityCode(parser.nextText()); } } break; case XmlPullParser.END_TAG:// 元素标签结束,END_TAG结束常量 if ("Citychar".equals(parser.getName())&&cityModle!=null) { cityModles.add(cityModle); cityModle = null; } break; } ////没有结束xml文件就推到下个进行解析 eventType = parser.next(); } inStream.close(); return cityModles; } }
代码简单相信大家都能看懂createADXML是生成xml的方法,下面的方法是使用pull解析我我生成的文档,我把文件放在assest文件夹
大家可以用:
InputStream open = context.getResources().getAssets().open(“citys.xml”);
获得所需要的流
这样就完美的解决了这个问题希望对大家有帮助。
相关文章推荐
- 构造json串
- js iframe 打印 打印预览 页眉页脚的设立
- Javascript-检测实例关系
- 基于js 的自动提示控件
- 201506081340_《JavaScript秘密花园》
- [EXTJS]combo下拉框可多选
- jsp与jsp页面传值数值。
- JavaScript中__proto__与prototype的关系
- 浅谈javascript函数劫持
- javascript必知必会之prototype
- JavaScript--fullPage.js插件
- 关于JSONArray的用法示例
- js获取屏幕高度,宽度,滚动距离属性总结
- ExtJs开发教程_001_Ext.data.Store使用方法详解
- Animy.js,自己编写的功能丰富的html动画库
- js DOM节点
- 使用js做出弹窗效果
- js 倒计时
- javaScript实现选中文字提示新浪微博分享的效果
- Js获取当前日期时间及其它操作