第2章
使用DOM读取XML文件
除了可以使用 SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件。 DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。
import l.domain.Person;
/** 使用Dom解析xml文件
*/
public class DomXMLReader {
public static List<Person> readXML(InputStream inStream) {
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = wInstance();
try {
DocumentBuilder builder = wDocumentBuilder();
Document dom = builder.parse(inStream);
Element root = DocumentElement();
NodeList items = ElementsByTagName("person");//查所有person节点
for (int i = 0; i < Length(); i++) {
Person person = new Person();
//得到第一个person节点
Element personNode = (Element) items.item(i);
//获取person节点的id属性值
person.setId(new Attribute("id")));
//获取person节点下的所有子节点(标签之间的空白节点和name/age元素)
NodeList childsNodes = ChildNodes();
for (int j = 0; j < Length(); j++) {
Node node = (Node) childsNodes.item(j);
//判断是否为元素类型
NodeType() == Node.ELEMENT_NODE){ Element childNode = (Element) node;
//判断是否name元素
if ("name".NodeName())) {
//获取name元素下Text节点,然后从Text节点获取数据 person.FirstChild().getNodeValue());
} else if (“age”.NodeName())) {
person.setAge(new FirstChild().getNodeValue()));
}
}
}
persons.add(person);
}
inStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return persons;
}
使用Pull解析器读取XML文件
除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用Text()方法可以获取下一个Text类型元素的值。
public class PullXMLReader {
public static List<Person> readXML(InputStream inStream) {
XmlPullParser parser = wPullParser();
try {
parser.setInput(inStream, "UTF-8");
int eventType = EventType();
Person currentPerson = null;
List<Person> persons = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG://开始元素事件
String name = Name();
if (name.equalsIgnoreCase("person")) {
currentPerson = new Person();
currentPerson.setId(new AttributeValue(null, "id")));
} else if (currentPerson != null) {
if (name.equalsIgnoreCase("name")) {
currentPerson.Text());// 如果后面是Text元素,即返回它的值
} else if (name.equalsIgnoreCase("age")) {
currentPerson.setAge(new Text()));
}
}
break;
case XmlPullParser.END_TAG://结束元素事件
if (Name().equalsIgnoreCase("person") && currentPerson != null) {
persons.add(currentPerson);
currentPerson = null;
}
break;
}
eventType = ();
}
spring boot原理流程 inStream.close();
return persons;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论