Sun公司的jaxp解析中的sax解析:
首先通过javax.xml.parsers.SAXParserFactory类创建工厂
SAXParserFactory factory=SAXParserFactory.newInstance()
通过工厂创建解析器javax.xml.parsers.SAXParser
SAXParser parser=factory.newSAXParser();
现在就可以开始解析XML文件了
比如,通过parse(InputStream is, DefaultHandler dh)方法,其中第二个参数类调用了ContentHandlerDTDHandlerEntityResolverErrorHandler借口。
不过还可以继续往下,通过SAXParser的getXMLReader()方法获得XMLReader对象。
通过方法setContentHandler(ContentHandler handler)和parse(InputSource input)开始解析。
参考文档中有个类XMLReaderFactory有静态方法createXMLReader()返回XMLReader对象,试了一下发现报错提示没加载org.xml.sax.driver驱动。
解析时的顺序很奇怪,比如解析下面这段XML文件。
- <Root>
- <ITEM>
<Type>采掘</Type>
</ITEM>
- <ITEM>
<Type>地测</Type>
</ITEM>
- <ITEM>
<Type>机运</Type>
</ITEM>
- <ITEM>
<Type>其它</Type>
</ITEM>
- <ITEM>
<Type>一通三防</Type>
</ITEM>
解析代码如下:
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("startDocument");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("endDocument");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
System.out.println("startElement"+uri+" localname:"+localName+" qname:"+qName+"sssss");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
System.out.println("endElement"+" localname:"+localName+" qname:"+qName+"eeeeeeeeeeee");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
System.out.println("characters"+new String(ch,start,length)+"ccccc");
}
输出片段如图

public void getHome(InputStream xml) throws Exception{
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(xml, "UTF-8");//为Pull解析器设置要解析的XML数据
// pullParser.setInput(xml, "GB2312");
int event = pullParser.getEventType();
while(event != XmlPullParser.END_DOCUMENT){
Log.v("BreakPoint","111111111111111111111");
switch (event) {
case XmlPullParser.START_DOCUMENT:
Log.v("BreakPoint",Integer.toString( XmlPullParser.START_DOCUMENT));
break;
case XmlPullParser.START_TAG:
Log.v("BreakPoint",Integer.toString( XmlPullParser.START_TAG));
break;
case XmlPullParser.END_TAG:
Log.v("BreakPoint",Integer.toString( XmlPullParser.END_TAG));
break;
default:
break;
}
event = pullParser.next();
Log.v("BreakPoint",Integer.toString(event));
}
}
XML生成步奏(XmlSerializer): 1.通过android.util.Xml类的newSerializer()方法得到生成器对象xml。 2.xml.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);此方法用于自动换行,可在生成过程中使用,什么时候用什么时候起作用。 3.xml.setOutput(out, "UTF-8");第一个参数是输出流,即指向生成的xml文件。 4.xml.startDocument("UTF-8", true); 开始写XML文件,此句主要生成<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>信息,第一个参数决定encoding='UTF-8',第二个参数决定standalone='yes' ,如果填null则不会生成对应的信息。 5.xml.startTag(null, "name"); 第一个参数是命名空间,第二个是标签名。生成开始标签 6.xml.text("who"); 生成标签对中间的内容 7.xml.endTag(null, "name"); 生成结束标签 。 5、6、7合起来生成的是<name>who</name> 8.xml.endDocument(); 结束xml生成。 i.其中如果不写startDocument,那么生成的xml文件将不会有<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>信息。 ii.如果startDocument没写编码方式,将用setOutput方法中指定的。如果setOutput也没指定,那么encoding='UTF-8'将不会生成。如果setOutput与startDocument写的编码不一致,将写startDocument中的。
无意中发现一个类android.os.FileObserver,此类用于监测指定文件或者文件夹(包括文件夹下的子文件、子文件夹)的各种变化,包括增删改等。