使用java自带的xml解析器解析xml
使用java自带的xml解析器解析xml,
其实我不推荐,可以用Dom解析,或其他的方式,
因为Java自带的解析器使用不但麻烦,且还有bug出现。
它要求,针对不同的xml(结构不同),必须写对应的handler处理类,
而Dom解析可以写通用的方法(前提是要写出通用逻辑)来处理,开发比较快。
下面上代码
//------------------ main point ---------------------
javax.xml.parsers.SAXParserFactory
public static void main(String[] args)
{
//cdu 存放结果的对象
CS3drawUnit cdu=new CS3drawUnit(); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser;
try {
parser = factory.newSAXParser(); /* // 方式一
InputStream is=new ByteArrayInputStream(strxml.getBytes("UTF-8"));
parser.parse(is, new Apphandler(cdu));
*/ // 方式二
parser.parse(new File("cs3.xml"),new Apphandler(cdu));
}
catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 存放结果的实体
//------------------CS3drawUnit bean---------------------
public class CS3drawUnit { //可以有多个 fields,因为太多我省略了好多
private String XWallThickness=""; public String getXWallThickness() {
return XWallThickness;
}
public void setXWallThickness(String xWallThickness) {
XWallThickness = xWallThickness;
} } // 这就是处理类handler
//------------------Apphandler ---------------------
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class Apphandler extends DefaultHandler { /*
<field>
<name>Type / tubes in face</name>
<value>A (1/2" OD) / 16</value>
</field> */ Unit u=null;
//内部类 为了在characters方法中调用,使代码显的清晰
public class Unit{ private String xname="";
private String xvalue="";
private String xmodelNo ="";
private String xahTag =""; public String getXahTag() {
return xahTag;
}
public void setXahTag(String xahTag) {
this.xahTag = xahTag;
}
public String getXname() {
return xname;
}
public void setXname(String xname) {
this.xname = xname;
}
public String getXvalue() {
return xvalue;
}
public void setXvalue(String xvalue) {
this.xvalue = xvalue;
}
public String getxmodelNo() {
return xmodelNo;
}
public void setxmodelNo(String xmodelNo) {
this.xmodelNo = xmodelNo;
} }
CS3drawUnit cdu=null; private final int xname_STATE = 1;
private final int xvalue_STATE = 2;
private final int xmodelNo_STATE = 3;
private final int xahTag_STATE = 4; private int currentState; public Apphandler(CS3drawUnit cdu)
{
this.cdu=cdu;
currentState=0;
u=new Unit();
} //获取解析结果,可以再处理,此处把结果再加工,set到cdu实例中返回
///@Override
public void endElement(String uri, String localName, String qName)
throws SAXException { if(qName.equals("modelNo")&& u!= null){
cdu.setXModelNo(u.getxmodelNo());
}
if(qName.equals("ahTag")&& u!= null){
cdu.setXAhTag(u.getXahTag());
} } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
//System.out.println("qName:"+qName);
if (qName.equals("field")){
u=new Unit();
return;
} if (qName.equals("name")){
currentState = xname_STATE;
return ;
} if (qName.equals("value")){
currentState = xvalue_STATE;
return ;
}
if (qName.equals("modelNo")){
currentState = xmodelNo_STATE;
return ;
} if (qName.equals("ahTag")){
currentState = xahTag_STATE;
return ;
}
} public void characters(char[] ch, int start, int length) throws SAXException { //length这个值在某些情况下,会被裁断(莫名其妙),估计是bug,遇到过一回,
//所以我在后来不让它解析出错时的字段,改用Dom解析。
String theString = new String(ch, start, length); switch(currentState)
{
case xname_STATE:
u.setXname(theString);
currentState = 0;
break; case xvalue_STATE:
u.setXvalue(theString);
currentState = 0;
break;
case xmodelNo_STATE:
u.setxmodelNo(theString);
currentState = 0;
break;
case xahTag_STATE:
u.setXahTag(theString);
currentState = 0;
break;
}
} }
若转载请标注 :转自 博客园 : http://www.cnblogs.com/rojas/p/4013297.html
使用java自带的xml解析器解析xml的更多相关文章
- Java DOM解析器 - 解析XML文档
使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- JavaScript使用浏览器内置XML解析器解析DOM对象
所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- 使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- 使用XMl序列化器生成xml文件
生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...
- HandlerMethodReturnValueHandler SpringMVC 参数解析 继承关系以及各解析器解析类型
I HandlerMethodReturnValueHandler (org.springframework.web.method.support) AbstractMessageConverterM ...
- HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型
HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型 I HandlerMethodArgumentResolver (org.spr ...
随机推荐
- 紫书 习题8-12 UVa 1153(贪心)
本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有 ...
- Object-C,数组NSArray
晚上回来,写了2个iOS应用程序. 就是在界面中,展示标签.一种是手动构造界面,然后绑定事件.另外一种是,使用自带的界面作为容器,但是手动向里面放其它界面元素. 书中的观点是,使用图形化界面,构造界面 ...
- 【BZOJ 1303】 [CQOI2009]中位数图
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是1..n的排列. 设b的位置为i. 设i右边的数字,比b大的为1,比b小的为-1. (i左边的位置数字也一样设置成1和-1 则 ...
- Qt之QDesktopServices
简述 QDesktopServices类提供的函数用于访问常见的桌面服务. 许多桌面环境都会提供一系列服务,可以通过应用程序来执行常见任务,如:以用户应用程序首选项的方式,打开一个网页. 此类包含为服 ...
- hadoop-01-ssh无密登录配置
1,分配master机器2台,slave机器5台: 2,在全部机器上面配置/etc/hosts设置 3,全部机器上面进行ntp设置:TODO 4,在master机器上面: 不要用root登录 1) s ...
- 数据可视化之Processing【1】
说Processing之前得先说一下数据可视化. 数据可视化--顾名思义.是关于数据之视觉表现形式的研究,将数据用其它方式表现出来,使之更直观, 更清晰,更easy分析和处理.常见的表达方式如word ...
- hdoj--1301--Jungle Roads(克鲁斯卡尔)
Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- 基于python3-sklearn,Flask 的回归预测系统
看到一副图片挺有意思,放在片头 序 "傍晚小街路面上沁出微雨后的湿润,和煦的西风吹来,抬头看看天边的晚霞,嗯明天又是一个好天气.走到水果摊旁,挑了个根蒂蜷缩.敲起来声音浊响的青绿西瓜,一边满 ...
- Android属性动画-Interpolator和ViewPropertyAnimator的用法
Interpolator的用法 Interpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果.那么什么叫做非线性运 ...
- 求从第一列走到第n列的最短路径
11 14 23 12 18 21 13 10 28 15 29 17 无 无 25 如上表所示.求从第一列到第n列的最短路径,行数不定,列数不定.这种情况下用什么算法比较好 可能说的不大清楚,例如有 ...