这是一个xml文件
使用Dom解析xml文件
public void dom(){
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();//获得解析工厂
try {
DocumentBuilder builder=documentBuilderFactory.newDocumentBuilder();//创建builder对象
InputStream inputStream = getAssets().open("book.xml");//获得XML文件
bookBeans=new ArrayList<>();
Document document=builder.parse(inputStream);//把整个文件添加到内存中(为什么需要把文件读到内存?因为内存比读SD卡快)
NodeList nodeList=document.getElementsByTagName("book");//获取文件中所有节点名为book的内容,并打算将这些内容存入到list集合中
//由于有好多个book节点,所以我们要对lis做遍历
for(int i=0;i<nodeList.getLength();i++){
//这样就拿到了其中一个book节点的内容,也就是一个对象的内容,包含5个属性
BookBean bookBean=new BookBean();//这就是那个对象
Node item = nodeList.item(i);//当i等于0的时候,获得的是第一个book对象,在文件中一共有2个book对象
//对象的节点找到了就是item,直接从node中获得属性
//接下来要来获得属性
String id=item.getAttributes().getNamedItem("id").getNodeValue();
bookBean.setId(Integer.parseInt(id));
NodeList childNodes = item.getChildNodes();
int length = childNodes.getLength();//这个是获得所有子节点的数量
for(int j=0;j<length;j++){
//获得处理啊的所有节点note,可以一个一个单独获得,也可以获得所有的,然后遍历
Node item1 = childNodes.item(j);
switch (item1.getNodeName()){
case "name":
bookBean.setName(item1.getTextContent());
break;
case "author":
bookBean.setAuthor(item1.getTextContent());
break;
case "year":
bookBean.setYear(Integer.parseInt(item1.getTextContent()));
break;
case "price":
bookBean.setPrcie(Integer.parseInt(item1.getTextContent()));
break;
}
}
bookBeans.add(bookBean);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Pull解析Xml文件
public void Pull_xml(){
try {
XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
InputStream inputStream = getAssets().open("book.xml");
xmlPullParser.setInput(inputStream,"utf-8");
int eventType = xmlPullParser.getEventType();
BookBean bookBean=null;
while (eventType!=XmlPullParser.END_DOCUMENT){//文档开头
switch (eventType){
case XmlPullParser.START_TAG:
if(xmlPullParser.getName().equals("book")){
bookBean=new BookBean();
String id = xmlPullParser.getAttributeValue(null, "id");
bookBean.id= Integer.parseInt(id);
}else if(xmlPullParser.getName().equals("name")){
String name = xmlPullParser.nextText();
bookBean.name=name;
}else if(xmlPullParser.getName().equals("author")){
String author = xmlPullParser.nextText();
bookBean.author=author;
}else if(xmlPullParser.getName().equals("year")){
String year = xmlPullParser.nextText();
bookBean.year=Integer.parseInt(year);
}else if(xmlPullParser.getName().equals("price")){
String price = xmlPullParser.nextText();
bookBean.prcie=Integer.parseInt(price);
}
break;
case XmlPullParser.END_TAG:
if(xmlPullParser.getName().equals("book")) {
bookBeans.add(bookBean);
}
break;
}
// 再此读取下一标签
eventType=xmlPullParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Sax解析xml文件
自定义一个类继承DefaultHandler,然后重写5个方法,其中有4中情况
1.文档开始
2.文档结束
3.标签开始
4.标签结束
class MyHandler extends DefaultHandler{
BookBean bookBean;
String Tem;//用来存放解出来的字符串
//文档开始
@Override
public void startDocument() throws SAXException {
super.startDocument();
bookBeans=new ArrayList<>();
}
//文档结束
@Override
public void endDocument() throws SAXException {
super.endDocument();
//文档结束不做处理
}
//标签开始
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if(qName.equals("book")){
bookBean=new BookBean();
bookBean.id= Integer.parseInt(attributes.getValue("id"));
}
}
//标签结束
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if(qName.equals("name")){
bookBean.name=Tem;
}else if(qName.equals("author")){
bookBean.author= Tem;
}else if(qName.equals("year")){
bookBean.year= Integer.parseInt(Tem);
}else if(qName.equals("price")){
bookBean.prcie= Integer.parseInt(Tem);
}
if(qName.equals("book")){
bookBeans.add(bookBean);
}
}
//类型转换
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
Tem=new String(ch,start,length);
}
}