当前位置: 首页 > news >正文

xml数据解析

XML Pull Parser(使用Android的XmlPullParser)

原理

Pull Parser允许应用程序代码从XML数据中“拉取”事件,而不是像SAX那样通过事件处理程序被“推送”。应用程序代码可以决定何时拉取下一个事件,如开始元素、结束元素或文本内容。

优点
  • 高效内存使用:不需要加载整个文档到内存中。
  • 控制权:应用程序可以控制解析过程。
缺点
  • 与平台绑定:如Android的XmlPullParser,它并非Java标准库的一部分。
Java代码示例(Android)
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.StringReader;
public class XmlPullParserExample {
public void parseXml(String xmlString) throws XmlPullParserException, IOException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(xmlString));
int eventType = xpp.getEventType();
String tagName = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
tagName = xpp.getName();
// 处理开始标签
break;
case XmlPullParser.END_TAG:
tagName = xpp.getName();
// 处理结束标签
break;
case XmlPullParser.TEXT:
// 处理文本内容
break;
// 其他情况...
}
eventType = xpp.next();
}
}
}

SAX Parser

原理

SAX Parser是一个基于事件的解析器,它读取XML文档并触发一系列事件,如开始元素、结束元素和字符数据。应用程序需要实现一个ContentHandler接口来处理这些事件。

优点
  • 高效内存使用:不需要加载整个文档到内存中。
  • 适用于大型XML文件。
缺点
  • 编程模型复杂:需要编写事件处理代码。
  • 不能回溯或修改解析的数据。
Java代码示例
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParserExample extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// 处理开始标签
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// 处理结束标签
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// 处理文本内容
}
public void parseXml(String xmlString) throws SAXException, IOException, ParserConfigurationException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new InputSource(new StringReader(xmlString)), this);
}
}

注意:上述代码中的InputSource类需要从javax.xml.transform.stream.InputSource导入,并且你需要处理ParserConfigurationException异常。同时,SAXParserSAXParserFactory都位于javax.xml.parsers包中。

http://www.lryc.cn/news/371516.html

相关文章:

  • vite工程化搭建vue项目之自动按需导入
  • yolo-inference多后端+多任务+多算法+多精度模型 框架开发记录(python版)
  • uniapp使用vue3语法构建自定义导航栏,适配小程序胶囊
  • wpf、winform 监听USB拔插时触发
  • C语言:指针笔试题
  • 搜维尔科技:Movella旗下的Xsens在人形机器人开发中得到广泛应用
  • k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
  • Mock数据
  • 【MySQL】性能分析
  • MyBatis插件机制
  • NVIDIA Jetson Linux 35.3.1-开发指南-导言
  • 14. fastLED调色板
  • bugku---misc---赛博朋克
  • vue+elementplus模拟“山野愚人居”简单实现个人博客
  • ComfyUI 完全入门:Refiner精炼器
  • FastAPI操作关系型数据库
  • 数字化那点事:一文读懂智慧城市
  • RabbitMQ-topic exchange使用方法
  • 6-11 函数题:某范围中的最小值
  • Flask基础2-Jinja2模板
  • Serverless 使用OOS将http文件转存到对象存储
  • AcWing 477:神经网络 ← 拓扑排序+链式前向星
  • 鲁教版八年级数学下册-笔记
  • Web前端栅格:深入解析与实战应用
  • mysql Innodb引擎常见问题
  • 创建 MFC DLL-使用关键字_declspec(dllexport)
  • 机器学习笔记 - 用于3D数据分类、分割的Point Net的网络实现
  • C#知识|基于实体类对象,返回实体集合封装介绍。
  • 关于Redis中哨兵(Sentinel)
  • 论文阅读:H-ViT,一种用于医学图像配准的层级化ViT