一.Xml解析,解析xml并封装到list中的javabean中
OM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理
1.获取xml解析器
XmlPullParser xpp = Xml.newPullParser();
2.设置解析器参数
xpp.setInput(in, "utf-8");//in为输入流
3.获取事件类型
int type = xpp.getEventType();
4.不断向下解析,一行一行解析
while(type != XmlPullParser.END_DOCUMENT){ switch(type){ case XmlPullParser.START_TAG://解析开始标签 //具体判断是哪个开始标签 if("weather".equals(xpp.getName())){ weatherlist = new ArrayList<Channel>(); }else if("channel".equals(xpp.getName())){ ch = new Channel(); String id = xpp.getAttributeValue(0); ch.setId(id); }else if("city".equals(xpp.getName())){ String city = xpp.nextText(); ch.setCity(city); }else if("temp".equals(xpp.getName())){ String temp = xpp.nextText(); ch.setTemp(temp); }else if("wind".equals(xpp.getName())){ String wind = xpp.nextText(); ch.setWind(wind); }else if("pm2.5".equals(xpp.getName())){ String pm250 = xpp.nextText(); ch.setPm250(pm250); } break; case XmlPullParser.END_TAG://解析结束标签 //判断要解析的结束标签 if("channel".equals(xpp.getName())){ //把ch对象添加到集合 weatherlist.add(ch); } break; } type = xpp.next(); }
5.对应的要解析的文件:
<?xml version="1.0" encoding="utf-8"?> <weather> <channel id="1"> <city>北京</city> <temp>16℃</temp> <wind>4</wind> <pm2.5>300</pm2.5> </channel> <channel id="2"> <city>上海</city> <temp>20℃</temp> <wind>5</wind> <pm2.5>200</pm2.5> </channel> <channel id="3"> <city>广州</city> <temp>25℃</temp> <wind>3</wind> <pm2.5>100</pm2.5> </channel> <channel id="4"> <city>深圳</city> <temp>27℃</temp> <wind>6</wind> <pm2.5>150</pm2.5> </channel> </weather>
6.对应的JAVABEAN代码
package com.hui.xmlparse; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; public class ParserXml { public static List<Channel> weatherlist = null; public static Channel ch = null; public static List <Channel> weatherParser(InputStream in) throws Exception { //获取xml解析器 XmlPullParser xpp = Xml.newPullParser(); //设置解析器参数 xpp.setInput(in, "utf-8"); //获取事件类型 int type = xpp.getEventType(); //不断向下解析 while(type != XmlPullParser.END_DOCUMENT){ switch(type){ case XmlPullParser.START_TAG://解析开始标签 //具体判断是哪个开始标签 if("weather".equals(xpp.getName())){ weatherlist = new ArrayList<Channel>(); }else if("channel".equals(xpp.getName())){ ch = new Channel(); String id = xpp.getAttributeValue(0); ch.setId(id); }else if("city".equals(xpp.getName())){ String city = xpp.nextText(); ch.setCity(city); }else if("temp".equals(xpp.getName())){ String temp = xpp.nextText(); ch.setTemp(temp); }else if("wind".equals(xpp.getName())){ String wind = xpp.nextText(); ch.setWind(wind); }else if("pm2.5".equals(xpp.getName())){ String pm250 = xpp.nextText(); ch.setPm250(pm250); } break; case XmlPullParser.END_TAG://解析结束标签 //判断要解析的结束标签 if("channel".equals(xpp.getName())){ //把ch对象添加到集合 weatherlist.add(ch); } break; } type = xpp.next(); } return weatherlist; } }
需要程序源码的可以加我微信x241602私聊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?