Xml主要有三种解析方式分别为dom、sax、还有xmlpull,先来说下各自的优缺点。
1、dom解析的特点是将整个xml文档以树形结构放入到内存中,是官方推荐标准,优点是在内存中可以增删改查,缺点是当文件过大是可能会内存溢出。
2、sax解析是一行一行的进行解析,是程序员社区开发出来的,优点是不会内存溢出,缺点是不能修改里面的内容
3、xmlpull的解析类似sax解析,是android内置的解析器。
dom解析,注释很详细,直接上代码,实际开发中用这种方式的不多
private void domTest() {
try {
//获取dom解析器的工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//通过工厂获取一个dom解析器的实例
DocumentBuilder builder = factory.newDocumentBuilder();
//解析xml文件,参数可以是串,可以是文件,也可以是流
Document dom = builder.parse("");
//获取book元素的集合
NodeList list = dom.getElementsByTagName("book");
for(int i=0;i<list.getLength();i++){
//得到一个book元素
Node node = list.item(i);
//获取到book元素下其他元素的集合
NodeList childNodes = node.getChildNodes();
for(int j=0;j<childNodes.getLength();j++){
//得到一个其他元素
Node node1 = childNodes.item(j);
//获取元素名
String nodeName = node1.getNodeName();
//获取元素里的内容
String textContent = node1.getTextContent();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
sax解析
private void saxTest() {
try {
//获取sax解析器的工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//通过工厂获取一个sax解析器的实例
SAXParser parser = factory.newSAXParser();
//解析xml文件,参数1为xml文件名,参数2为
parser.parse("",new HdBase());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public class HdBase extends DefaultHandler{
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}