移动架构34_Android中解析xml文件

Android移动架构汇总​​​​​​​
在安卓中通常需要解析xml文件,获取想要的数据,例如:数据库升级时,对应不同版本有不同的sql语句,可以通过xml文件保存起来,那么如何在Android中解析xml文件呢?
##一、将xml文件转换为IO流
xml文件assets/updateXml.xml:

<updateXml>
    <createVersion version="V003">
        <createDb name="user">
            <sql_createTable>
                create table if not exists tb_user(
                name TEXT,
                password TEXT,
                loginName TEXT,
                lastLoginTime Long,
                user_id Integer primary key
                );
            </sql_createTable>
        </createDb>
        <createDb name="logic">
            <sql_createTable>
                create table if not exists tb_photo(
                time TEXT,
                path TEXT,
                to_user TEXT,
                sendTime TEXT
                );
            </sql_createTable>
        </createDb>
    </createVersion>
</updateXml>

IO流解析,生成对应xml的API(Document):

InputStream is = null;
        Document document = null;
        try {
            is = context.getAssets().open("updateXml.xml");
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            document = builder.parse(is);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

##二、Xml解析的API
1、整个xml文档:Document获取元素节点集合

NodeList nodeList = document.getElementsByTagName("updateStep");

//updateStep 节点名称
2、元素节点Element中获取子节点集合

NodeList nodeList = ele.getElementsByTagName("updateDb");

//ele为Element类型,updateDb表示子节点名称
3、节点集合中获取节点

  NodeList nodeList = document.getElementsByTagName("updateStep");
   for (int i = 0; i < nodeList.getLength(); i++) {
         Element ele = (Element) nodeList.item(i); 
   }

3、获取元素节点的属性

String version = ele.getAttribute("version");

4、获取元素节点的属性的内容

ele.getTextContent();

##三、解析
###1、每一个节点定义一个对应的类,用来描述记录其结构和相关属性
###2、从分支的子元素节点定义模型,从最上层的Document进行解析

##四、定义节点对应的类

public class UpdateDbXml
{
	/**
	 * 升级版本
	 */
	private List<CreateVersion> createVersions;

	public UpdateDbXml(Document document)
	{
		{
			/**
			 * 获取各升级版本
			 */
			NodeList createVersions = document.getElementsByTagName("createVersion");
			this.createVersions = new ArrayList<CreateVersion>();
			for (int i = 0; i < createVersions.getLength(); i++)
			{
				Element ele = (Element) (createVersions.item(i));
				CreateVersion cv = new CreateVersion(ele);
				this.createVersions.add(cv);
			}
		}
	}


	public List<CreateVersion> getCreateVersions()
	{
		return createVersions;
	}

	public void setCreateVersions(List<CreateVersion> createVersions)
	{
		this.createVersions = createVersions;
	}

}
public class CreateVersion
{
	/**
	 * 版本信息
	 */
	private String version;

	/**
	 * 创建数据库表脚本
	 */
	private List<CreateDb> createDbs;

	public CreateVersion(Element ele)
	{
		version = ele.getAttribute("version");

		{
			createDbs = new ArrayList<CreateDb>();
			NodeList cs = ele.getElementsByTagName("createDb");
			for (int i = 0; i < cs.getLength(); i++)
			{
				Element ci = (Element) (cs.item(i));
				CreateDb cd = new CreateDb(ci);
				this.createDbs.add(cd);
			}
		}
	}

	public String getVersion()
	{
		return version;
	}

	public void setVersion(String version)
	{
		this.version = version;
	}

	public List<CreateDb> getCreateDbs()
	{
		return createDbs;
	}

	public void setCreateDbs(List<CreateDb> createDbs)
	{
		this.createDbs = createDbs;
	}

}
public class CreateDb
{

	/**
	 * 数据库表名
	 */
	private String name;

	/**
	 * 创建表的sql语句集合
	 */
	private List<String> sqlCreates;

	public CreateDb(Element ele)
	{
		name = ele.getAttribute("name");

		{
			sqlCreates = new ArrayList<String>();
			NodeList sqls = ele.getElementsByTagName("sql_createTable");
			for (int i = 0; i < sqls.getLength(); i++)
			{
				String sqlCreate = sqls.item(i).getTextContent();
				this.sqlCreates.add(sqlCreate);
			}
		}
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public List<String> getSqlCreates()
	{
		return sqlCreates;
	}

	public void setSqlCreates(List<String> sqlCreates)
	{
		this.sqlCreates = sqlCreates;
	}

}

##四、使用

UpdateDbXml xml = new UpdateDbXml(document)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值