加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解析一个XML文件: XML解析器

发布时间:2020-12-16 05:16:29 所属栏目:百科 来源:网络整理
导读:解析一个 XML 文件 :XML 解析器 public class MainActivity extends Activity implements OnClickListener { private Button bt ; private SmsBean sms ; private ListSmsBean smsList ; @Override protected void onCreate(Bundle savedInstanceState) { su

解析一个XML文件:XML解析器

public class MainActivity extends Activity implements OnClickListener {

private Button bt ;
private SmsBean sms ;
private List<SmsBean> smsList ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
bt =(Button) findViewById(R.id. bt );
bt .setOnClickListener( this );
}

/**
* 解析xml文件的方法
* @param v
*/
@Override
public void onClick(View v) {
try {
//创建pull解析器
XmlPullParser parser = Xml.newPullParser();
//pull解析器配置
FileInputStream fis= new FileInputStream(Environment.getExternalStorageDirectory().getPath()+ "/sms.xml" );
parser.setInput(fis, "UTF-8" );
//开始解析,获事件的类型
int eventType = parser.getEventType();
while (eventType!=XmlPullParser. END_DOCUMENT ){ //当事件类型不等于END_DOCUMENT时,继续解析
String tageName=parser.getName(); //得到解析节点的名称
switch (eventType) {
case XmlPullParser. START_TAG : //当解析的事件是开始标签时
if ( "Sms" .equals(tageName)){
smsList = new ArrayList<SmsBean>();
}
else if ( "sms" .equals(tageName)){
sms = new SmsBean();
sms .setName(parser.getAttributeValue(0));
}
else if ( "address" .equals(tageName)){
sms .setStress(parser.nextText());
}
else if ( "content" .equals(tageName)){
sms .setContent(parser.nextText());
}
else if ( "tate" .equals(tageName)){
sms .setDate(Integer.parseInt(parser.nextText()));
}
break ;

case XmlPullParser. END_TAG :
if ( "Sms" .equals(tageName)){
smsList .add( sms );
sms = null ;
}
break ;
}
}
//继续往下解析
eventType=parser.next();
} catch (Exception e) {
e.printStackTrace();
}
sms .toString();
}
}




--------------------------------------------------------------------------------------------------

解析网络上xml文件和json文件:

public class PersonService {

public List<Person> getPersonsByXML() throws Exception {
URL url = new URL( "http://192.168.1.100:8080/05.Web/persons.xml" );
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
int code = conn.getResponseCode();
if (code == 200) {
InputStream in = conn.getInputStream();
return parseXML(in);
}
throw new RuntimeException( "网络异常: " + code);
}

/**
* 解析网络上的xml文件
* @param in
* @return
* @throws Exception
*/
private List<Person> parseXML(InputStream in) throws Exception {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8" );
List<Person> list = new ArrayList<Person>();
Person p = null ;
for ( int type = parser.getEventType(); type != XmlPullParser. END_DOCUMENT ; type = parser.next()) {
if (type == XmlPullParser. START_TAG ) {
if ( "person" .equals(parser.getName())) {
p = new Person();
String id = parser.getAttributeValue(0);
p.setId(Integer.parseInt(id));
list.add(p);
} else if ( "name" .equals(parser.getName())) {
String name = parser.nextText();
p.setName(name);
} else if ( "age" .equals(parser.getName())) {
String age = parser.nextText();
p.setAge(Integer.parseInt(age));
}
}
}
return list;
}

/**
* 解析网络上的json文件
* @return
* @throws Exception
*/
public List<Person> getPersonsByJSON() throws Exception {
URL url = new URL( "http://192.168.1.100:8080/05.Web/persons.js" );
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
int code = conn.getResponseCode();
if (code == 200) {
InputStream in = conn.getInputStream();
return parseJSON(in);
}
throw new RuntimeException( "网络异常: " + code);
}

private List<Person> parseJSON(InputStream in) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte [] buffer = new byte [8192];
int length;
while ((length = in.read(buffer)) != -1)
out.write(buffer,length);
in.close();
out.close();
String json = new String(out.toByteArray());
List<Person> list = new ArrayList<Person>();
JSONArray arr = new JSONArray(json); // 把String封装成JSON数组
for ( int i = 0; i < arr.length(); i++) { // 遍历JSON数组
JSONObject obj = arr.getJSONObject(i); // 获取每个JSON对象
Person p = new Person();
p.setId(obj.getInt( "id" )); // 从JSON对象中获取"id"字段的值
p.setName(obj.getString( "name" ));
p.setAge(obj.getInt( "age" ));
list.add(p);
}
return list;
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读