您的位置:首页 > Web前端 > JavaScript

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”);

获得所需要的流

这样就完美的解决了这个问题希望对大家有帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: