XmlUtil工具类:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
 
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
 
import android.text.TextUtils;
import android.util.Xml;
 
/**
 * XML文件工具类,包含:将xml文件解析成实体集合、获取xml标签值、将标签值解析成实体集合
 */
public class XMLUtil {
 
	private XMLUtil(){}
	
	/*-
	 * XML文件解析成实体,不涉及到标签的属性值。
	 * @param xml	xml字符串文件
	 * @param clazz		对应实体的class文件
	 * @param tagEntity		
	 * 开始解析实体的标签,例如下面的实例中就是student<br>
	 * < person ><br>
	 *  	< student ><br>
	 * 				< name >Lucy< /name ><br>
	 * 				< age >21< /age ><br>
	 * 		< /student ><br>
	 * < /person ><br>
	 * @return		返回解析的对应实体文件
	 */
	public static<T> List<T> xmlToObject(String xml, Class<T> clazz, String tagEntity){
		List<T> list = null;
		XmlPullParser xmlPullParser = Xml.newPullParser();
		InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
		try {
			xmlPullParser.setInput(inputStream, "utf-8");
			Field[] fields = clazz.getDeclaredFields();
			int type = xmlPullParser.getEventType();
			String lastTag = "";
			T t = null;
			while (type != XmlPullParser.END_DOCUMENT) {
				switch (type) {
				case XmlPullParser.START_DOCUMENT:
					list = new ArrayList<T>();
					break;
				case XmlPullParser.START_TAG:
					String tagName = xmlPullParser.getName();
					if(tagEntity.equals(tagName)){
						t = clazz.newInstance();
						lastTag = tagEntity;
					}else if(tagEntity.equals(lastTag)){
						String textValue = xmlPullParser.nextText();
						String fieldName = xmlPullParser.getName();
						for(Field field : fields){
							ReflectUtil.setFieldValue(t,field,fieldName,textValue);
						}
					}
					break;
				case XmlPullParser.END_TAG:
					tagName = xmlPullParser.getName();
					if(tagEntity.equals(tagName)){
						list.add(t);
						lastTag = "";
					}
					break;
				case XmlPullParser.END_DOCUMENT:
					break;
				}
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}
	
	/**
	 * 获取xml字符串标签中的属性值
	 * @param xml	xml字符串
	 * @param clazz		转换成对应的实体
	 * @param tagName	实体对应xml字符串的起始标签,如下面实例中的person标签<br>
	 * < person name="Lucy" age="12"><br>
	 *  	< student ><br>
	 * 				< name >Lucy< /name ><br>
	 * 				< age >21< /age ><br>
	 * 		< /student ><br>
	 * < /person ><br>
	 * @return  返回属性值组成的List对象集合。
	 */
	public static<T> List<T> attributeToObject(String xml, Class<T> clazz, String tagName){
		if(TextUtils.isEmpty(tagName))return null;
		List<T> list = null;
		XmlPullParser xmlPullParser = Xml.newPullParser();
		InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
		try {
			xmlPullParser.setInput(inputStream, "utf-8");
			int type = xmlPullParser.getEventType();
			T t = null;
			while(type != XmlPullParser.END_DOCUMENT){
				switch(type){
				case XmlPullParser.START_DOCUMENT:
					list = new ArrayList<T>();
					break;
				case XmlPullParser.START_TAG:
					if(tagName.equals(xmlPullParser.getName())){
						t = clazz.newInstance();
						Field[] fields = clazz.getDeclaredFields();
						for(Field field : fields){
							String fieldName = field.getName();
							for(int index = 0;index < xmlPullParser.getAttributeCount();index++){
								if(fieldName.equals(xmlPullParser.getAttributeName(index))){
									ReflectUtil.setFieldValue(t,field,fieldName,xmlPullParser.getAttributeValue(index));
								}
							}
						}
					}
					break;
				case XmlPullParser.END_TAG:
					if(tagName.equals(xmlPullParser.getName())){
						list.add(t);
					}
					break;
				case XmlPullParser.END_DOCUMENT:
					break;
				}
				type = xmlPullParser.next();
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return list;
		
	}
	
	/**
	 * 获取Xml文件中的属性值
	 * @param xml	xml文件字符串
	 * @param tagName		标签名称
	 * @param attributeName		属性名称
	 * @return	返回获取的值,或者null
	 */
	public static String getTagAttribute(String xml, String tagName, String attributeName){
		if(TextUtils.isEmpty(tagName) || TextUtils.isEmpty(attributeName)){
			throw new IllegalArgumentException("请填写标签名称或属性名称");
		}
		XmlPullParser xmlPullParser = Xml.newPullParser();
		InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
		try {
			xmlPullParser.setInput(inputStream, "utf-8");
			int type = xmlPullParser.getEventType();
			while(type != XmlPullParser.END_DOCUMENT){
				switch(type){
				case XmlPullParser.START_TAG:
					if(tagName.equals(xmlPullParser.getName())){
						for(int i=0; i < xmlPullParser.getAttributeCount();i++){
							if(attributeName.equals(xmlPullParser.getAttributeName(i))){
								return xmlPullParser.getAttributeValue(i);
							}
						}
					}
					break;
				}
				type = xmlPullParser.next();
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}

 

XMLUtil 是一个工具类,主要用于读取 XML 配置文件并提供相应的操作方法。XMLUtil 的主要功能包括: 1. 读取 XML 配置文件:XMLUtil 可以读取指定路径下的 XML 配置文件,并将其解析成对应的 Java 对象或数据结构。这样,Java 应用程序就可以通过 XML 配置文件来获取应用程序的配置信息,而不需要硬编码到代码中。 2. 解析 XML 配置文件:XMLUtil 可以解析 XML 配置文件中的各种元素和属性,并将其转换为 Java 对象或数据结构。这样,Java 应用程序就可以通过 Java 对象或数据结构来访问 XML 配置文件中的配置信息。 3. 提供操作方法:XMLUtil 还提供了一些常用的操作方法,比如获取指定元素或属性的值、添加或删除指定元素或属性等。这样,Java 应用程序就可以通过 XMLUtil 提供的方法来修改 XML 配置文件中的配置信息。 XMLUtil 的好处包括: 1. 简化配置:通过 XML 配置文件,Java 应用程序可以将配置信息与代码分离,使得配置信息更易于管理和维护。而 XMLUtil 则可以更加方便地读取和解析 XML 配置文件,从而简化了配置的过程。 2. 提高灵活性:由于 XMLUtil 可以将 XML 配置文件解析成 Java 对象或数据结构,所以 Java 应用程序可以通过 Java 对象或数据结构来访问配置信息,从而提高了应用程序的灵活性。 3. 提高可维护性:通过 XMLUtil 提供的操作方法,Java 应用程序可以更加方便地修改 XML 配置文件中的配置信息,从而提高了应用程序的可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值