XML解析
发布时间:2020-12-16 05:42:46 所属栏目:百科 来源:网络整理
导读:1.SAX解析,解析过程中返回遇到的标签名称,到达指定标签时触发不同的方法,继承DefaultHandler实现自己的解析过程 SAX解析是java内置的解析方法 /** * @author chendong * @内容:使用SAX对 xml进行解析,需要自定义handler java自带解析工具 */ public cla
1.SAX解析,解析过程中返回遇到的标签名称,到达指定标签时触发不同的方法,继承DefaultHandler实现自己的解析过程 /** * @author chendong * @内容:使用SAX对 xml进行解析,需要自定义handler java自带解析工具 */
public class NewSaxPaser {
public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {
SAXParserFactory f = SAXParserFactory.newInstance();
SAXParser parser = f.newSAXParser();
MySaxHandler h = new MySaxHandler();
FileInputStream fis = new FileInputStream("file/stu.xml" );
parser.parse(fis,h);
}
}
// 自定义handler
class MySaxHandler extends DefaultHandler {
private List<Stu> list;
private Stu stu;
private String tagName;
private static void show(List<Stu> list) {
for (Stu s : list) {
System. out.println(s);
}
}
// 文档开始
@Override
public void startDocument() throws SAXException {
list = new ArrayList<>();
}
// 标签开始
@Override
public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
tagName = qName;
// 判断是不是Stu标签
if ( "stu".equals( tagName)) {
stu = new Stu();
// 判断是不是有属性值
if (attributes != null && attributes.getLength() > 0) {
// 包含属性,加载属性
for ( int i = 0; i < attributes.getLength(); i++) {
String attrName = attributes.getQName(i);
if ( "id".equals(attrName)) {
String attrValue = attributes.getValue(i);
stu.setId(attrValue);
}
}
}
}
}
// 文本处
@Override
public void characters( char[] ch,int start,int length)
throws SAXException {
if ( tagName == null)
return;
String data = new String(ch,start,length);
if (data == null || "".equals(data))
return;
if ( "name".equals( tagName)) {
stu.setName(data);
} else if ( "age".equals( tagName)) {
stu.setAge(Integer. parseInt(data));
}
}
// 标签结束
@Override
public void endElement(String uri,String qName)
throws SAXException {
if ( "stu".equals(qName)) {
list.add( stu);
}
tagName = null;
}
// 文档结束
@Override
public void endDocument() throws SAXException {
super.endDocument();
show(list);
}
}
2.pull解析,解析过程中返回定义好的数值型 import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import com.march.review.Stu;
/* * 使用Pull解析完成对输入流的 xml解析 * 主要用法: //工厂 XmlPullParserFactory f = XmlPullParserFactory.newInstance(); // 解析器 XmlPullParser parser = f.newPullParser(); // 设置输入流 parser.setInput(is,"utf-8"); //获取当前标签类型 int event = parser.getEventType(); //标签名 String tag = parser.getName(); //标签属性的个数 parser.getAttributeCount() //标签属性名 parser.getAttributeName(i); //属性的值 parser.getAttributeValue(i); //标签内文本 parser.nextText(); //下一个标签类型 event =parser.next(); */
public class NewPullpPaser {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("file/stu.xml" );
Parse(fis);
}
//遍历xml文件
private static List<Stu> FillList(List<Stu> list,XmlPullParser parser)
throws XmlPullParserException,IOException {
Stu stu = null;
int event = parser.getEventType();
while (event != XmlPullParser. END_DOCUMENT) {
switch (event) {
// 文档开始,初始化集合
case XmlPullParser. START_DOCUMENT:
list = new ArrayList<>();
break;
// 标签开始,判断是什么标签
case XmlPullParser. START_TAG:
String tag = parser.getName();
if ( "stu".equals(tag)) {
stu = new Stu();
// 判断是否含有属性
if (parser.getAttributeCount() > 0) {
for ( int i = 0; i < parser.getAttributeCount(); i++) {
String attriName = parser.getAttributeName(i);
if ("id".equals(attriName)) {
String attriValue = parser.getAttributeValue(i);
stu.setId(attriValue);
}
}
}
} else if ( "name".equals(tag)) {
stu.setName(parser.nextText());
} else if ( "age".equals(tag)) {
stu.setAge(Integer. parseInt(parser.nextText()));
}
break;
// 标签结束,添加到集合中
case XmlPullParser. END_TAG:
if ( "stu".equals(parser.getName()))
list.add(stu);
break;
}
event = parser.next();
}
return list;
}
private static void show(List<Stu> list) {
for (Stu s : list) {
System. out.println(s);
}
}
//设置输入流
public static List<Stu> Parse(InputStream is) throws IOException {
List<Stu> list = null;
XmlPullParserFactory f;
try {
// 工厂
f = XmlPullParserFactory. newInstance();
// 解析器
XmlPullParser parser = f.newPullParser();
// 设置输入流
parser.setInput(is,"utf-8");
list = FillList(list,parser);
show(list);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |