java 自带解析xml_使用java自带的xml解析器解析xml

该代码示例展示了如何使用Java的SAXParserFactory和SAXParser解析XML文件。在解析过程中,创建了一个名为CS3drawUnit的实体来存储结果,并通过自定义的Apphandler处理类处理XML元素。解析完成后,将结果设置到CS3drawUnit对象中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 //------------------ main point ---------------------

2 javax.xml.parsers.SAXParserFactory3 public static voidmain(String[] args)4 {5 //cdu 存放结果的对象

6 CS3drawUnit cdu=newCS3drawUnit();7

8 SAXParserFactory factory =SAXParserFactory.newInstance();9

10 SAXParser parser;11 try{12 parser =factory.newSAXParser();13

14 /*// 方式一15 InputStream is=new ByteArrayInputStream(strxml.getBytes("UTF-8"));16 parser.parse(is, new Apphandler(cdu));17 */

18

19 //方式二

20 parser.parse(new File("cs3.xml"),newApphandler(cdu));21 }22 catch(ParserConfigurationException e) {23 //TODO Auto-generated catch block

24 e.printStackTrace();25 } catch(SAXException e) {26 //TODO Auto-generated catch block

27 e.printStackTrace();28 } catch(IOException e) {29 //TODO Auto-generated catch block

30 e.printStackTrace();31 }32 }33

34 //存放结果的实体35 //------------------CS3drawUnit bean---------------------

36 public classCS3drawUnit {37

38 //可以有多个 fields,因为太多我省略了好多

39 private String XWallThickness="";40

41 publicString getXWallThickness() {42 returnXWallThickness;43 }44 public voidsetXWallThickness(String xWallThickness) {45 XWallThickness =xWallThickness;46 }47

48 }49

50 //这就是处理类handler51 //------------------Apphandler ---------------------

52 importorg.xml.sax.Attributes;53 importorg.xml.sax.SAXException;54 importorg.xml.sax.helpers.DefaultHandler;55

56 public class Apphandler extendsDefaultHandler {57

58 /*

59 60 Type / tubes in face61 A (1/2" OD) / 1662 63

64 */

65

66

67 Unit u=null;68 //内部类 为了在characters方法中调用,使代码显的清晰

69 public classUnit{70

71 private String xname="";72 private String xvalue="";73 private String xmodelNo ="";74 private String xahTag ="";75

76

77 publicString getXahTag() {78 returnxahTag;79 }80 public voidsetXahTag(String xahTag) {81 this.xahTag =xahTag;82 }83 publicString getXname() {84 returnxname;85 }86 public voidsetXname(String xname) {87 this.xname =xname;88 }89 publicString getXvalue() {90 returnxvalue;91 }92 public voidsetXvalue(String xvalue) {93 this.xvalue =xvalue;94 }95 publicString getxmodelNo() {96 returnxmodelNo;97 }98 public voidsetxmodelNo(String xmodelNo) {99 this.xmodelNo =xmodelNo;100 }101

102

103 }104 CS3drawUnit cdu=null;105

106 private final int xname_STATE = 1;107 private final int xvalue_STATE = 2;108 private final int xmodelNo_STATE = 3;109 private final int xahTag_STATE = 4;110

111

112 private intcurrentState;113

114 publicApphandler(CS3drawUnit cdu)115 {116 this.cdu=cdu;117 currentState=0;118 u=newUnit();119 }120

121 //获取解析结果,可以再处理,此处把结果再加工,set到cdu实例中返回

122 ///@Override

123 public voidendElement(String uri, String localName, String qName)124 throwsSAXException {125

126

127 if(qName.equals("modelNo")&& u!= null){128 cdu.setXModelNo(u.getxmodelNo());129 }130 if(qName.equals("ahTag")&& u!= null){131 cdu.setXAhTag(u.getXahTag());132 }133

134 }135

136 public void startElement(String uri, String localName, String qName, Attributes attributes) throwsSAXException {137 //TODO Auto-generated method stub138 //System.out.println("qName:"+qName);

139 if (qName.equals("field")){140 u=newUnit();141 return;142 }143

144 if (qName.equals("name")){145 currentState =xname_STATE;146 return;147 }148

149 if (qName.equals("value")){150 currentState =xvalue_STATE;151 return;152 }153 if (qName.equals("modelNo")){154 currentState =xmodelNo_STATE;155 return;156 }157

158 if (qName.equals("ahTag")){159 currentState =xahTag_STATE;160 return;161 }162 }163

164

165 public void characters(char[] ch, int start, int length) throwsSAXException {166

167 //length这个值在某些情况下,会被裁断(莫名其妙),估计是bug,遇到过一回,168 //所以我在后来不让它解析出错时的字段,改用Dom解析。

169 String theString = newString(ch, start, length);170

171 switch(currentState)172 {173 casexname_STATE:174 u.setXname(theString);175 currentState = 0;176 break;177

178 casexvalue_STATE:179 u.setXvalue(theString);180 currentState = 0;181 break;182 casexmodelNo_STATE:183 u.setxmodelNo(theString);184 currentState = 0;185 break;186 casexahTag_STATE:187 u.setXahTag(theString);188 currentState = 0;189 break;190 }191 }192

193 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值