安卓怎么获取xml中的元素数组
安卓如何获取xml中的元素数组?
xml文件在服务器,
------解决思路----------------------
1:首先,定义实体类Song
2:定义接口
3:具体实现接口
4:实现调用
运行结果:

song.xml文件就是你上面的文件
xml文件在服务器,
This XML file does not appear to have any style information associated with it. The document tree is shown below.安卓获取<thumb_url></thumb_url>中的元素数组怎么写?
<music>
<song>
<id>1</id>
<title>Someone Like You</title>
<artist>Adele</artist>
<duration>4:47</duration>
<thumb_url>http://api.androidhive.info/music/images/adele.png</thumb_url>
</song>
<song>
<id>2</id>
<title>Space Bound</title>
<artist>Eminem</artist>
<duration>4:38</duration>
<thumb_url>
http://api.androidhive.info/music/images/eminem.png
</thumb_url>
</song>
<song>
<id>3</id>
<title>Stranger In Moscow</title>
<artist>Michael Jackson</artist>
<duration>5:44</duration>
<thumb_url>http://api.androidhive.info/music/images/mj.png</thumb_url>
</song>
<song>
<id>4</id>
<title>Love The Way You Lie</title>
<artist>Rihanna</artist>
<duration>4:23</duration>
<thumb_url>
http://api.androidhive.info/music/images/rihanna.png
</thumb_url>
</song>
<song>
<id>5</id>
<title>Khwaja Mere Khwaja</title>
<artist>A R Rehman</artist>
<duration>6:58</duration>
<thumb_url>
http://api.androidhive.info/music/images/arrehman.png
</thumb_url>
</song>
<song>
<id>6</id>
<title>All My Days</title>
<artist>Alexi Murdoch</artist>
<duration>4:47</duration>
<thumb_url>
http://api.androidhive.info/music/images/alexi_murdoch.png
</thumb_url>
</song>
<song>
<id>7</id>
<title>Life For Rent</title>
<artist>Dido</artist>
<duration>3:41</duration>
<thumb_url>http://api.androidhive.info/music/images/dido.png</thumb_url>
</song>
<song>
<id>8</id>
<title>Love To See You Cry</title>
<artist>Enrique Iglesias</artist>
<duration>4:07</duration>
<thumb_url>
http://api.androidhive.info/music/images/enrique.png
</thumb_url>
</song>
<song>
<id>9</id>
<title>The Good, The Bad And The Ugly</title>
<artist>Ennio Morricone</artist>
<duration>2:42</duration>
<thumb_url>http://api.androidhive.info/music/images/ennio.png</thumb_url>
</song>
<song>
<id>10</id>
<title>Show me the meaning</title>
<artist>Backstreet Boys</artist>
<duration>3:56</duration>
<thumb_url>
http://api.androidhive.info/music/images/backstreet_boys.png
</thumb_url>
</song>
<song>
<id>11</id>
<title>Someone Like You</title>
<artist>Adele</artist>
<duration>4:47</duration>
<thumb_url>http://api.androidhive.info/music/images/adele.png</thumb_url>
</song>
<song>
<id>12</id>
<title>Space Bound</title>
<artist>Eminem</artist>
<duration>4:38</duration>
<thumb_url>
http://api.androidhive.info/music/images/eminem.png
</thumb_url>
</song>
<song>
<id>13</id>
<title>Stranger In Moscow</title>
<artist>Michael Jackson</artist>
<duration>5:44</duration>
<thumb_url>http://api.androidhive.info/music/images/mj.png</thumb_url>
</song>
<song>
<id>14</id>
<title>Love The Way You Lie</title>
<artist>Rihanna</artist>
<duration>4:23</duration>
<thumb_url>
http://api.androidhive.info/music/images/rihanna.png
</thumb_url>
</song>
<song>
<id>15</id>
<title>Khwaja Mere Khwaja</title>
<artist>A R Rehman</artist>
<duration>6:58</duration>
<thumb_url>
http://api.androidhive.info/music/images/arrehman.png
</thumb_url>
</song>
<song>
<id>16</id>
<title>All My Days</title>
<artist>Alexi Murdoch</artist>
<duration>4:47</duration>
<thumb_url>
http://api.androidhive.info/music/images/alexi_murdoch.png
</thumb_url>
</song>
<song>
<id>17</id>
<title>Life For Rent</title>
<artist>Dido</artist>
<duration>3:41</duration>
<thumb_url>http://api.androidhive.info/music/images/dido.png</thumb_url>
</song>
<song>
<id>18</id>
<title>Love To See You Cry</title>
<artist>Enrique Iglesias</artist>
<duration>4:07</duration>
<thumb_url>
http://api.androidhive.info/music/images/enrique.png
</thumb_url>
</song>
<song>
<id>19</id>
<title>The Good, The Bad And The Ugly</title>
<artist>Ennio Morricone</artist>
<duration>2:42</duration>
<thumb_url>http://api.androidhive.info/music/images/ennio.png</thumb_url>
</song>
<song>
<id>20</id>
<title>Show me the meaning</title>
<artist>Backstreet Boys</artist>
<duration>3:56</duration>
<thumb_url>
http://api.androidhive.info/music/images/backstreet_boys.png
</thumb_url>
</song>
<song>
<id>21</id>
<title>Someone Like You</title>
<artist>Adele</artist>
<duration>4:47</duration>
<thumb_url>http://api.androidhive.info/music/images/adele.png</thumb_url>
</song>
<song>
<id>22</id>
<title>Space Bound</title>
<artist>Eminem</artist>
<duration>4:38</duration>
<thumb_url>
http://api.androidhive.info/music/images/eminem.png
</thumb_url>
</song>
<song>
<id>23</id>
<title>Stranger In Moscow</title>
<artist>Michael Jackson</artist>
<duration>5:44</duration>
<thumb_url>http://api.androidhive.info/music/images/mj.png</thumb_url>
</song>
<song>
<id>24</id>
<title>Love The Way You Lie</title>
<artist>Rihanna</artist>
<duration>4:23</duration>
<thumb_url>
http://api.androidhive.info/music/images/rihanna.png
</thumb_url>
</song>
<song>
<id>25</id>
<title>Khwaja Mere Khwaja</title>
<artist>A R Rehman</artist>
<duration>6:58</duration>
<thumb_url>
http://api.androidhive.info/music/images/arrehman.png
</thumb_url>
</song>
<song>
<id>26</id>
<title>All My Days</title>
<artist>Alexi Murdoch</artist>
<duration>4:47</duration>
<thumb_url>
http://api.androidhive.info/music/images/alexi_murdoch.png
</thumb_url>
</song>
<song>
<id>27</id>
<title>Life For Rent</title>
<artist>Dido</artist>
<duration>3:41</duration>
<thumb_url>http://api.androidhive.info/music/images/dido.png</thumb_url>
</song>
<song>
<id>28</id>
<title>Love To See You Cry</title>
<artist>Enrique Iglesias</artist>
<duration>4:07</duration>
<thumb_url>
http://api.androidhive.info/music/images/enrique.png
</thumb_url>
</song>
<song>
<id>29</id>
<title>The Good, The Bad And The Ugly</title>
<artist>Ennio Morricone</artist>
<duration>2:42</duration>
<thumb_url>http://api.androidhive.info/music/images/ennio.png</thumb_url>
</song>
<song>
<id>30</id>
<title>Show me the meaning</title>
<artist>Backstreet Boys</artist>
<duration>3:56</duration>
<thumb_url>
http://api.androidhive.info/music/images/backstreet_boys.png
</thumb_url>
</song>
</music>
------解决思路----------------------
1:首先,定义实体类Song
package com.example.androiddemo;
public class Song {
String id;
String title;
String artist;
String duration;
String thumb_url;
@Override
public String toString() {
return "id="+id+",title="+title+",artist="+artist+",duration="+duration+",thumb_url="+thumb_url;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public String getThumb_url() {
return thumb_url;
}
public void setThumb_url(String thumb_url) {
this.thumb_url = thumb_url;
}
}
2:定义接口
package com.example.androiddemo;
import java.io.InputStream;
import java.util.List;
public interface RootParser {
/**
* 解析输入流
* @param stream
* @return
* @throws Exception
*/
public List<Song> parse(InputStream stream)throws Exception;
/**
* 序列化Song对象
* @param song
* @return
* @throws Exception
*/
public String serialize(List<Song> song)throws Exception;
}
3:具体实现接口
package com.example.androiddemo;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;
public class SongParser implements RootParser{
@Override
public List<Song> parse(InputStream stream) throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance();//取得SAXParserFactory实例
SAXParser parser = factory.newSAXParser();//从factory获取SAXParser实例
MyHandler handler = new MyHandler();//实例化自定义Handler
parser.parse(stream, handler);//根据自定义Handler规则解析输入流
return handler.getSong();
}
@Override
public String serialize(List<Song> song) throws Exception {
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();//取得SAXTransformerFactory实例
TransformerHandler handler = factory.newTransformerHandler();//从factory获取TransformerHandler实例
Transformer transformer = handler.getTransformer();//从handler获取Transformer实例
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");// 设置输出采用的编码方式
transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 是否自动添加额外的空白
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");// 是否忽略XML声明
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
handler.setResult(result);
String uri = ""; //代表命名空间的URI 当URI无值时 须置为空字符串
String localName = ""; //命名空间的本地名称(不包含前缀) 当没有进行命名空间处理时 须置为空字符串
handler.startDocument();
handler.startElement(uri, localName, "music", null);
AttributesImpl attrs = new AttributesImpl(); //负责存放元素的属性信息
char[] ch = null;
for(Song singleSong:song){
attrs.clear(); //清空属性列表
attrs.addAttribute(uri, localName, "id", "string", singleSong.getId());//添加一个名为id的属性
handler.startElement(uri, localName, "song", attrs); //开始一个song元素 关联上面设定的id属性
handler.startElement(uri, localName, "title", null); //开始一个title元素 没有属性
ch = singleSong.getTitle().toCharArray();
handler.characters(ch, 0, ch.length); //设置title元素的文本节点
handler.endElement(uri, localName, "title");
handler.startElement(uri, localName, "artist", null); //开始一个artist元素 没有属性
ch = singleSong.getTitle().toCharArray();
handler.characters(ch, 0, ch.length); //设置artist元素的文本节点
handler.endElement(uri, localName, "artist");
handler.startElement(uri, localName, "duration", null); //开始一个duration元素 没有属性
ch = singleSong.getTitle().toCharArray();
handler.characters(ch, 0, ch.length); //设置duration元素的文本节点
handler.endElement(uri, localName, "duration");
handler.startElement(uri, localName, "thumb_url", null); //开始一个thumb_url元素 没有属性
ch = singleSong.getTitle().toCharArray();
handler.characters(ch, 0, ch.length); //设置thumb_url元素的文本节点
handler.endElement(uri, localName, "thumb_url");
}
handler.endElement(uri, localName, "music");
handler.endDocument();
return writer.toString();
}
/**
* 需要重写DefaultHandler的方法
* @author luosiye
*
*/
private class MyHandler extends DefaultHandler {
private List<Song> songs;
private Song song;
private StringBuilder builder;
public List<Song> getSong(){
return songs;
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
songs = new ArrayList<Song>();
builder = new StringBuilder();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if (localName.equals("song")) {
song = new Song();
}
builder.setLength(0);//将字符长度设置为0 以便重新开始读取元素内的字符节点
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
builder.append(ch, start, length); //将读取的字符数组追加到builder中
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if (localName.equals("id")) {
song.setId(builder.toString());
}else if(localName.equals("title")){
song.setTitle(builder.toString());
}else if(localName.equals("artist")){
song.setArtist(builder.toString());
}else if(localName.equals("duration")){
song.setDuration(builder.toString());
}else if(localName.equals("thumb_url")){
song.setThumb_url(builder.toString());
}else if(localName.equals("song")){
songs.add(song);
}
}
}
}
4:实现调用
package com.example.androiddemo;
import java.io.InputStream;
import java.util.List;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
public class MainActivity extends ActionBarActivity {
private SongParser parser;
private List<Song> songs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
InputStream is = getAssets().open("song.xml");
parser = new SongParser();
songs = parser.parse(is);
for(Song song:songs){
System.out.println(song.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
song.xml文件就是你上面的文件