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方法解析(更新中)
// 第一步:初始化事件解析
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方法解析(更新中)
相关文章推荐
- 脚本代码:实例解析Js+XML的操作方法
- XML WebService完全实例详细解析
- XML WebService实例详细解析
- JAXP,sax与dom4j解析xml文档及XPath在文档内容定位中的应用(持续更新,初学者的野路子、参考和想当然,不断学习和专业化)
- python 解析XML python模块xml.dom解析xml实例代码
- KMP的原理和代码实现(详细注释|参考多个博客总结|可作为模板)
- webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(附截图、代码、入门篇)
- Android解析XML(PULL方式)和JSON 工作原理和实现过程(详细代码)
- KMP的原理和代码实现(详细注释|参考多个博客总结|可作为模板)
- XML解析技术之VTD-XML 简介及代码实例
- 关于j2ee工程发布到was上后,部分更新,例修改web.xml配置文件不起作用的原因解析【转】
- Android解析XML(PULL方式)和JSON 工作原理和实现过程(详细代码)
- XML解析技术之VTD-XML 简介及代码实例
- JavaScript 解析读取XML文档 实例代码
- XML解析技术之VTD-XML 简介及代码实例
- swift:使用NSXMLParser解析本地xml文件(详细代码注释)
- 从网络上解析json小实例 分步骤参考
- XML解析技术之VTD-XML 简介及代码实例
- XML WebService完全实例详细解析
- XML WebService实例详细解析【收藏】