java

位置:IT落伍者 >> java >> 浏览文章

使用Java自带SAX工具解析XML


发布日期:2020年09月30日
 
使用Java自带SAX工具解析XML

studentInfoxml


<?xml version= encoding=gb?>

<student>

<person age=><!如果没有age属性默认的为>

<name>崔卫兵</name>

<college>PC学院</college>

<telephone></telephone>

<notes>男年生硕士现就读于北京邮电大学</notes>

</person>

<person>

<name>cwb</name>

<college leader=leader>PC学院</college><!如果没有leader属性

认的为leader>

<telephone></telephone>

<notes>男年生硕士现就读于中国农业大学</notes>

</person>

<person age=>

<name>xxxxx</name>

<college leader=学院领导>xxx学院</college>

<telephone></telephone>

<notes>注视中注释中</notes>

</person>

</student>

SAXHandlerjava

package saxExample;

import javautilHashMap;

import orgxmlsax*;

import orgxmlsaxhelpersDefaultHandler;

/**

* 继承DefaultHandler类用SAX实现对xml的遍历

* @author cuiweibing

* @since

*/

public class SAXHandler

extends DefaultHandler {

//存放所有的节点(这里的节点等于原来的节点+编号)以及它所对应的值

private HashMap<StringString> hashMap = new HashMap<StringString>();

//目前的节点

private String currentElement = null;

//目前节点所对应的值

private String currentValue = null;

//用于节点编号(具体到person)

private static int i=;

public HashMap getHashMap() {

return hashMap;

}

public void characters(char[] ch int start int length) throws SAXException {

//取出目前节点对应的值

currentValue = new String(ch start length);

}

public void startElement(String uri String localName String qName

Attributes attr) throws SAXException {

if(qNameequalsIgnoreCase(student)){

//currentElement= ;

}else if (qNameequalsIgnoreCase(person)){

i++;

//currentElement= ;

String age=attrgetValue(age);

if(age!=null){

  hashMapput(qName+age+i age);

}else{

  hashMapput(qName+age+i );

}

}else if (qNameequalsIgnoreCase(college)){

currentElement= qName;

String leader=attrgetValue(leader);

if(leader!=null){

  hashMapput(qName+leader+i leader);

}else{

  hashMapput(qName+leader+i leader);

}

}else{

currentElement= qName;

}

}

public void endElement(String uri String localName String qName) throws SAXException {

if (qNameequalsIgnoreCase(student)){

// hashMapput(currentElement currentValue);

}else if (qNameequalsIgnoreCase(person)){

}else{

currentElement+=i;

hashMapput(currentElement currentValue);

}

}

}

TestSAXHandlerjava

package saxExample;

import javaioFile;

import javautilHashMap;

import javaxxmlparsersSAXParserFactory;

import javaxxmlparsersSAXParser;

/**

* 解析主类

* @author cuiweibing

* @since

*/

public class TestSAXHandler {

public TestSAXHandler() {

}

public static void main(String[] args) {

try{

//初始化与解析

SAXHandler handler = new SAXHandler();

SAXParserFactory saxparserfactory = SAXParserFactorynewInstance();

SAXParser saxparser = saxparserfactorynewSAXParser();

saxparserparse(new File(studentInfoxml) handler);

//解析完后获取解析信息

HashMap hashMap = handlergetHashMap();

Systemoutprintln(姓名\t年龄\t学院\t学院领导\t电话\t\t备注);

for(int i=;i<hashMapsize();i+=){

int j=i/;

Systemoutprint(hashMapget(name+j)+\t);

Systemoutprint(hashMapget(personage+j)+\t);

Systemoutprint(hashMapget(college+j)+\t);

Systemoutprint(hashMapget(collegeleader+j)+\t);

Systemoutprint(hashMapget(telephone+j)+\t);

Systemoutprintln(hashMapget(notes+j)+\t);

}

}catch(Exception ex){

exprintStackTrace();

}

}

}

               

上一篇:在Java中使用反射分析类结构

下一篇:理解java的多形性