在Android平台上可以使用SAX(Simple API for XML)、Document Object Model(DOM)和Android附带的Pull解析器解析XML文件。
DOM解析: 处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
解析过程:
1. 获取factory
DocumentBuilderFactory builderFactory =DocumentBuilderFactory.newInstance();
2. 获取builder
builder =builderFactory.newDocumentBuilder();
3. 解析为Document对象
Document document = builder.parse(xmlFile);
4. 获取根元素
Element root = document.getDocumentElement();
5. 获取根元素下的子节点
NodeList childNodes =root.getChildNodes();
SAX解析: 不像DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问。
1. 获取factory
SAXParserFactory factory =SAXParserFactory.newInstance();
2. 获取Parser
SAXParser parser =factory.newSAXParser();
3. 开始解析
parser.parser(xmlFile, newMySAXListener());
PULL解析: 除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。
1. 获取parser
XmlPullParserparser = Xml.newPullParser();
2. 设置输入
parser.setInput(instream, “UTF-8”);
3. 获取事件类型
int eventType = parser.getEventType();
4. 开始解析