friends.xml
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<friends date="2012">
<!--此处为注释-->
<friend id="1">
<姓名>小红</姓名>
<!--address>上海</address-->
</friend>
<friend>
<姓名>小平</姓名>
<address>北京</address>
</friend>
<friend>
<姓名 mark="hello">小敏</姓名>
<QQ>980404356</QQ>
<address>深圳</address>
</friend>
<friend>
<姓名>小良</姓名>
<address>广州</address>
</friend>
<friend>
<姓名>小健</姓名>
<address>赣州</address>
</friend>
</friends></span>
SAXParseXML :
<span style="font-size:18px;">import java.io.File ;
import java.util.Stack ;
import javax.xml.parsers.SAXParserFactory ;
import javax.xml.parsers.SAXParser ;
import org.xml.sax.Attributes ;
import org.xml.sax.SAXException ;
import org.xml.sax.helpers.DefaultHandler ;
//利用SAX解析xml文档,SAX是基于事件处理的,占内存比较小
//解析过了的,就不能在回头解析
public class SAXParseXML
{
public static void main(String[] args) throws Exception
{
//获取SAX解析器工厂
SAXParserFactory spf = SAXParserFactory.newInstance() ;
//获取具体的SAX解析器
SAXParser ap = spf.newSAXParser() ;
ap.parse(new File("friends.xml"), new MyDefaultHandler()) ;
}
}
class MyDefaultHandler extends DefaultHandler
{
//定义一个栈来存取解析出来的信息
private Stack<String> stack = new Stack<String>() ;
private String name = null ;
private String qq = null ;
private String address = null ;
//重写父类的方法
@Override
public void startElement(String uri,
String localName,
String qName,
Attributes attributes) throws SAXException
{
//把元素压栈
stack.push(qName) ;
for (int i = 0; i < attributes.getLength() ; i++ )
{
//获取属性名字
String attrName = attributes.getQName(i) ;
//获取属性的值
String attrValue = attributes.getValue(i) ;
System.out.println(attrName + " = " + attrValue) ;
}
}
@Override
public void characters(char[] ch,
int start,
int length) throws SAXException
{
//查看堆栈顶部的对象,但不从堆栈中移除它。
String s = stack.peek() ;
if ("姓名".equals(s))
{
name = new String(ch, start, length) ;
}
else if ("QQ".equals(s))
{
qq = new String(ch, start, length) ;
}
else if ("address".equals(s))
{
address = new String(ch, start, length) ;
}
}
@Override
public void endElement(String uri,
String localName,
String qName) throws SAXException
{
// 移除堆栈顶部的对象
stack.pop() ;
if ("friend".equals(qName))
{
System.out.println("姓名 :" + name) ;
System.out.println("QQ :" + qq) ;
System.out.println("address :" + address) ;
System.out.println() ;
}
}
}</span>