您的位置:首页 > 业界新闻

xml解析(详细步骤及实例代码作为参考,理论部分请参阅互联网)之 SAXP (更新中)

2012-07-24 10:49 821 查看
(注释:SAXP若是对于一些递归层结构比较严格的xml信息,编写的代码对程序原来说比较麻烦,这个方法一般是对一大串信息混在在一起的信息解析会比较的容易) 一般来说利用SAXP的步骤一般有四步(可能也不一定视需求而定,可能每个人写的不一样),下面是获取网络上的xml并解析的一个实例部分代码:

// 第一步:初始化事件解析

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

XMLReader xr = sp.getXMLReader();

// 第二步:DefaultHandler 实现 并为此saxp注册这个handler(这个需要自己实现)

DemoHandler gwh = new DemoHandler (context);

xr.setContentHandler(gwh);

// 第三步:得到解析的数据(过程异步)

// 得到需要解析的数据 得到网络上的数据(或者是本地的xml文件,本文是从网络获取的xml信息)

InputStreamReader isr = new InputStreamReader(url.openStream(), "utf-8");

// 生成容器 InputSource 并将得到的XML信息 添加到解析器当中 整个过程是异步的

InputSource is = new InputSource(isr);

xr.parse(is);

// 第四步:如需处理解析内容则需在DemoHandler 中 提供得到javaBean的方法

// 在DefaultHandler继承类中取得java Bean

DemoBean ws = gwh.getDemoBean();

上面四步是整个解析上层的逻辑模块,即套路所有解析基本上的模式都如此,真正不一样的地方式DemoHandler 这个类里面你处理的xml内容形式。

public class DemoHandler extends DefaultHandler {

private static final String TAG = "DemoHandler ";

private DemoBean demoBean= null;

private Context context;

public DemoHandler (Context context) {

this.context = context;

}

// 返回天氣信息對象

public DemoBean getDemoBean t() {

return demoBean ;

}

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

super.endDocument();

Log.e(TAG, "----------endDocument()-------文档结束-xml解析入口只调用一次---->>");

}

@Override

public void endElement(String uri, String localName, String name)

throws SAXException {

Log.e(TAG, "----------endElement()-------节点结束----->>");

}

@Override

public void startDocument() throws SAXException {

Log.e(TAG, "----------startDocument()----文档开始-------->>");

this.demoBean= new DemoBean();

}

@Override

public void startElement(String uri, String localName, String name,

Attributes attributes) throws SAXException {

Log.e(TAG, "----------startElement()--------节点开始---->>");

// 分别将得到的信息设置到指定的对象中

String dataAttribute = attributes.getValue("data"); // 获取节点的信息值 并根据你需要筛选 放入javaBean当中

// javaBean筛选的过程 左边是一致节点的名 右边是当前获取得到的值 匹配则写入相应的bean属性中,否则继续进行解析。

// 因此saxp的主要部分就是在这个地方做好你的筛选工作 为其他模块做好数据的准备。

if ("icon".equals(localName)) {

if (this.is_Current_Conditions) {

} else if (this.is_Forecast_Conditions) {

}

} else if ("condition".equals(localName)) {

if (this.is_Current_Conditions) {

} else if (this.is_Forecast_Conditions) {

}

} else if ("temp_c".equals(localName)) {

} else if ("temp_f".equals(localName)) {

} else if ("humidity".equals(localName)) {

} else if ("wind_condition".equals(localName)) {

}// Tags is forecast_conditions

else if ("day_of_week".equals(localName)) {

} else if ("low".equals(localName)) {

} else if ("high".equals(localName)) {

}

}

@Override

public void characters(char ch[], int start, int length) {

/*

* Would be called on the following structure:

* <element>characters</element>

*/

}

}

详细说明见代码的注释。

以上是对saxp解析的一些小总结,随后将会有Dom方法解析(更新中)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: