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

    (注释: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方法解析(更新中)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值