您的位置:首页 > 其它

SAX 解析XML文件(相对解析的所有方法来说,这种最简单)

2012-09-01 10:27 447 查看
解析的stu.xml文件:

<?xml version="1.0"?>
<students>
<student id='001'>
<name>zhangsan</name>
<age>20</age>
</student>
<student id='002'>
<name>李四</name>
<age>23</age>
</student>
<student id="003">
<name>wangwu</name>
<age>21</age>
</student>
<student id="004">
<name>zhaoliu</name>
<age>26</age>
</student>
<haha>hello,world</haha>
</students>

SAX操作类:JaxpDemoBySax

package day4;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class JaxpDemoBySax {

/**
* @param args
* @throws SAXException
* @throws ParserConfigurationException
* @throws Exception
*/
public static void main(String[] args) throws ParserConfigurationException, SAXException, Exception {
// TODO Auto-generated method stub
//1.获取saxparserFactory
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.获取saxparser.
SAXParser parser=factory.newSAXParser();
//3.使用SAXParser对象parse方法与xml文件关联,并传入一个处理器。
/*XMLReader reader=parser.getXMLReader();
reader.setContentHandler(new MyHandler());
reader.parse("stu.xml");*/

//等价下面一句话
parser.parse(new File("stu.xml"), new MyHandler2());

//只取姓名+年龄
parser.parse(new File("stu.xml"), new MyHandler3());
}

}

class MyHandler3 extends DefaultHandler{//选中DefaultHandler+alt+shift+s

private String elementName;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
if("name".equals(elementName)||"age".equals(elementName)){
System.out.println(new String(ch,start,length));
}
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
//super.endElement(uri, localName, qName);
elementName=null;
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if(qName.equals("name")||qName.equals("age")){
elementName=qName;
}
}
}

class MyHandler2 extends DefaultHandler{//选中DefaultHandler+alt+shift+s

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
System.out.println(new String(ch,start,length));
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
//super.endElement(uri, localName, qName);
System.out.println("</"+qName+">");
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if(attributes.getValue("id")==null){
System.out.print("<"+qName+">");
}else
System.out.print("<"+qName+" id="+attributes.getValue("id")+">");
}

}

class MyHandler implements ContentHandler{

public void startDocument() throws SAXException {
// TODO Auto-generated method stub
//System.out.println("startDocument"+"....A");
}

public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// TODO Auto-generated method stub
System.out.print("<<"+qName+" id="+atts.getValue("id")+">>");
}

public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
System.out.println(new String(ch,start,length));
}

public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
System.out.println("<</"+qName+">>");
}
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
//System.out.println("endDocument"+"...D");

}

public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub

}

public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub

}

public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub

}

public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub

}

public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub

}

public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息