java解析xml文件方法
发布日期:2022-02-24 11:36:03 浏览次数:9 分类:技术文章

本文共 5223 字,大约阅读时间需要 17 分钟。

对xml数据的解析,在网络程序中经常会用到。在这里介绍SAX方法来处理xml文档。SAX是基于事件的,由回调机制实现。
在这里需要解析的文件mp3.xml
0001
Fayray-I Wanna Be Free.mp3
4867102
Fayray-I Wanna Be Free.lrc
1453
0002
teens-fire_fly.mp3
2999636
teens-fire_fly.lrc
1986
首先,需定义一个Mp3Info类,用于存放解析后的数据。Mp3Info.java
import java.io.Serializable; public class Mp3Info implements Serializable{
private static final long serialVersionUID = 1L; private String id; private String mp3Name; private String mp3Size; private String lrcName; private String lrcSize; public Mp3Info() {
super(); } public Mp3Info(String id, String mp3Name, String mp3Size, String lrcName, String lrcSize) {
super(); this.id = id; this.mp3Name = mp3Name; this.mp3Size = mp3Size; this.lrcName = lrcName; this.lrcSize = lrcSize; } public String getId() {
return id; } public void setId(String id) {
this.id = id; } public String getMp3Name() {
return mp3Name; } public void setMp3Name(String mp3Name) {
this.mp3Name = mp3Name; } public String getMp3Size() {
return mp3Size; } public void setMp3Size(String mp3Size) {
this.mp3Size = mp3Size; } public String getLrcName() {
return lrcName; } public void setLrcName(String lrcName) {
this.lrcName = lrcName; } public String getLrcSize() {
return lrcSize; } public void setLrcSize(String lrcSize) {
this.lrcSize = lrcSize; } @Override public String toString() {
return "Mp3Info [id=" + id + ", mp3Name=" + mp3Name + ", mp3Size=" + mp3Size + ", lrcName=" + lrcName + ", lrcSize=" + lrcSize + "]"; } }
定义一个用于解析xml文档的函数,函数名Parse(String xmlStr)。解析后的据存放在一个链表中。
private List
parse(String xmlStr){
List
infos = new ArrayList
(); SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser parser = null; //saxParserFactory.setNamespaceAware(true); //saxParserFactory.setValidating(true); try {
parser = saxParserFactory.newSAXParser(); //用于封装JDK提供的解析器 } catch(SAXException e) {
e.printStackTrace(System.err); System.exit(1); } catch(ParserConfigurationException e) {
e.printStackTrace(System.err); System.exit(1); } System.out.println("\nStarting parse ..."); Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(infos); try{ parser.parse(new InputSource(new StringReader(xmlStr)), mp3ListContentHandler); for(Iterator
iterator = infos.iterator(); iterator.hasNext();){
Mp3Info mp3Info = (Mp3Info)iterator.next(); System.out.println(mp3Info); } }catch(IOException e) {
//System.out.println("--------------->2"); e.printStackTrace(System.err); }catch(SAXException e) {
//System.out.println("--------------->3"); e.printStackTrace(System.err); } return infos; }
在Prase()函数中,出现了一个类,mp3ListContentHandler,因此还需要对它进行定义。解析的关键部分都在此类中。
import java.util.List; import jia.model.Mp3Info; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class Mp3ListContentHandler extends DefaultHandler{
private List
infos = null; private Mp3Info mp3Info = null; private String tagName = null; //Constructor public Mp3ListContentHandler(List
infos) {
this.infos = infos; } public List
getInfos() {
return infos; } public void setInfos(List
infos) {
this.infos = infos; } @Override public void characters(char[] ch, int start, int length) throws SAXException {
String temp = new String(ch, start, length); //System.out.println("Characters: " + temp); if (tagName.equals("id")) {
mp3Info.setId(temp); } else if (tagName.equals("mp3.name")) {
mp3Info.setMp3Name(temp); } else if (tagName.equals("mp3.size")) {
mp3Info.setMp3Size(temp); } else if (tagName.equals("lrc.name")) {
mp3Info.setLrcName(temp); } else if (tagName.equals("lrc.size")) {
mp3Info.setLrcSize(temp); } } @Override public void endDocument() throws SAXException {
//System.out.println("End document"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("resource")) {
infos.add(mp3Info); } tagName = ""; //System.out.println("End element: local name: " + localName + " qname: " // + qName + " uri: "+uri); } @Override public void startDocument() throws SAXException {
System.out.println("Start document:"); } @Override public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
//System.out.println("Start element: local name: " + localName + " qname: " // + qName + " uri: "+uri); int attrCount = attr.getLength(); if(attrCount>0) {
System.out.println("Attributes:"); for(int i = 0 ; i
这些代码是在android视频教学中用到的,我做了一些修改。感谢作者的的奉献。如需要解析其他的xml文件,只需按照上面的格式,进行一些修改即可。

转载地址:https://blog.csdn.net/iteye_17609/article/details/82008181 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android 调用.net的web Service开发 (KSOAP2)
下一篇:接口隔离原则「Interface Segregation Principle」

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月29日 14时27分28秒