clipse里XML调整格式快捷键:Ctrl+Shift+F
/*SAX解析的内容处理器*/
public class PersonHandler extends DefaultHandler
{
private List<Teacher> teachers=null;
private Teacher teacher;
private String tag;
public List<Teacher> getTeachers()
{
return teachers;
}
@override
//重新startDocument()方法,开始解析XML时回调的方法
public void startDocument() throws SAXException
{
//super.startDocument();
teachers=new ArrayList<Teacher>();
}
@override
public void endDocument() throws SAXException
{
super.endDocument();
System.out.println("XML解析完毕");
}
//解析开始元素<> uri——表示标签的命名空间 localName——元素名(不带前缀) qName——带前缀的元素名称 attributes——属性的集合
@override
public void startElement(String uri,String localName,String qNname,Attributes attributes ) throws SAXException
{
//super.startElement(uri,localName,gName,attributes);
if("teacher".equals(qName))
{
teacher=new Teacher();
teacher.setId(Integer.parseInt(attributes.getValue("id"))); //取出属性,并添加到teacher中
}
tag=qName;
}
//解析结束元素</>
@override
public void endElement(String uri,String localName,String gNname,Attributes attributes ) throws SAXException
{
//super.endElement(uri,localName,gName,attributes);
if("teacher".equals(gName))
{
teachers.add(teacher);
}
tag=null;
}
//解析文本内容时解析的方法
@override
public void characters(char[] ch,int start,int length) throws SAXException
{
//super.characters(ch,start,length);
if(tag!=NULL){
if("name".equals(tag))
{
teacher.setName(new String(ch,start,length));
}else("desc".equals(tag))
{
teacher.setDesc(new String(ch,start,length));
}
}
}
}
public class SAXDemo
{
public static void main(String args[])
{
//创建SAX解析器工厂
SAXParserFactory spf=SAXParserFactory.newInstance();
//通过解析器工厂创建解析器
SAXParser sax=spf.newSAXParser();
//创建SAX解析器要使用的事件帧听器对象
PersonHandler ph=new PersonHandler();
//构建一个指向指定文件的输入流
InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("person.xml");
//开始解析,并返回Document对象
sax.parse(is,ph);
List<Teacher> list=ph.getTeachers();
System.out.println(list);
}
//根据文档的节点获取数据
NodeList nodeList=doc.getElementsByTagName("teacher");
List<Teacher> teachers=new ArrrayList(Teacher)();
Teacher t=null;
for(int i=0;i<nodeList.getLength();i++)
{
t=new Teacher();
Node teacherNode =nodeList.item(i);
//获取当前节点的属性id
Teachernode.getAttributes().getNamedItem("id").getNodeValue();
t.setId(Integer.parseInt(id));
//获取当前节点下的所有子节点列表
NodeList childNodeList=teacherNode.getChildNodes();
for(int j=0;j<childNodeList.getLength();j++ )
{
Node childNode=childNodeList.item(j);
String tagname= childNode.getNodeName();
if("name"equals(tagname))
{
t.setName(childNode.getFirstChild().getNodeValue);
}else("desc"equals(tagname))
{
t.setDesc(childNode.getFirstChild().getNodeValue);
}
}
teachers.add(t);
}
}
/*SAX解析的内容处理器*/
public class PersonHandler extends DefaultHandler
{
private List<Teacher> teachers=null;
private Teacher teacher;
private String tag;
public List<Teacher> getTeachers()
{
return teachers;
}
@override
//重新startDocument()方法,开始解析XML时回调的方法
public void startDocument() throws SAXException
{
//super.startDocument();
teachers=new ArrayList<Teacher>();
}
@override
public void endDocument() throws SAXException
{
super.endDocument();
System.out.println("XML解析完毕");
}
//解析开始元素<> uri——表示标签的命名空间 localName——元素名(不带前缀) qName——带前缀的元素名称 attributes——属性的集合
@override
public void startElement(String uri,String localName,String qNname,Attributes attributes ) throws SAXException
{
//super.startElement(uri,localName,gName,attributes);
if("teacher".equals(qName))
{
teacher=new Teacher();
teacher.setId(Integer.parseInt(attributes.getValue("id"))); //取出属性,并添加到teacher中
}
tag=qName;
}
//解析结束元素</>
@override
public void endElement(String uri,String localName,String gNname,Attributes attributes ) throws SAXException
{
//super.endElement(uri,localName,gName,attributes);
if("teacher".equals(gName))
{
teachers.add(teacher);
}
tag=null;
}
//解析文本内容时解析的方法
@override
public void characters(char[] ch,int start,int length) throws SAXException
{
//super.characters(ch,start,length);
if(tag!=NULL){
if("name".equals(tag))
{
teacher.setName(new String(ch,start,length));
}else("desc".equals(tag))
{
teacher.setDesc(new String(ch,start,length));
}
}
}
}
public class SAXDemo
{
public static void main(String args[])
{
//创建SAX解析器工厂
SAXParserFactory spf=SAXParserFactory.newInstance();
//通过解析器工厂创建解析器
SAXParser sax=spf.newSAXParser();
//创建SAX解析器要使用的事件帧听器对象
PersonHandler ph=new PersonHandler();
//构建一个指向指定文件的输入流
InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("person.xml");
//开始解析,并返回Document对象
sax.parse(is,ph);
List<Teacher> list=ph.getTeachers();
System.out.println(list);
}
//根据文档的节点获取数据
NodeList nodeList=doc.getElementsByTagName("teacher");
List<Teacher> teachers=new ArrrayList(Teacher)();
Teacher t=null;
for(int i=0;i<nodeList.getLength();i++)
{
t=new Teacher();
Node teacherNode =nodeList.item(i);
//获取当前节点的属性id
Teachernode.getAttributes().getNamedItem("id").getNodeValue();
t.setId(Integer.parseInt(id));
//获取当前节点下的所有子节点列表
NodeList childNodeList=teacherNode.getChildNodes();
for(int j=0;j<childNodeList.getLength();j++ )
{
Node childNode=childNodeList.item(j);
String tagname= childNode.getNodeName();
if("name"equals(tagname))
{
t.setName(childNode.getFirstChild().getNodeValue);
}else("desc"equals(tagname))
{
t.setDesc(childNode.getFirstChild().getNodeValue);
}
}
teachers.add(t);
}
}