JAVA解析XML的四种方法比较+_第1页
JAVA解析XML的四种方法比较+_第2页
JAVA解析XML的四种方法比较+_第3页
JAVA解析XML的四种方法比较+_第4页
JAVA解析XML的四种方法比较+_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA解析XML的四种方法比较 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations), XML在不同的语言里解析方式都是一样的,只不过实

2、现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下:1 view plaincopy to clipboardprint? 2 3 4 5 ddviplinux 6 m 7 30 8 9 10 11 12 ddviplinux 13 m 14 30 15 16 本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。 首先定义一个操作XML文档的接口XmlDocument 它定义了XML文档的建立与解析的接口。17 view plaincopy to clipboardpri

3、nt? 18 package19 /* 20 * 21 * author hongliang.dinghl 22 * 定义XML文档建立与解析的接口 23 */ 24 public interface XmlDocument 25 /* 26 * 建立XML文档 27 * param fileName 文件全路径名称 28 */ 29 public void createXml(String fileName); 30 /* 31 * 解析XML文档 32 * param fileName 文件全路径名称 33 */ 34 public void parserXml(String fileNa

4、me); 35 36 package37 /* 38 * 39 * author hongliang.dinghl 40 * 定义XML文档建立与解析的接口 41 */ 42 public interface XmlDocument 43 /* 44 * 建立XML文档 45 * param fileName 文件全路径名称 46 */ 47 public void createXml(String fileName); 48 /* 49 * 解析XML文档 50 * param fileName 文件全路径名称 51 */ 52 public void parserXml(String fi

5、leName); 53 1. DOM生成和解析XML文档 为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。54 view plaincopy to clipboardprint? 55 package56 import57 import58 import59 import60 import61

6、import62 import63 import64 import65 import66 import67 import68 import69 import70 import71 import72 import73 import74 import75 import76 import77 /* 78 * 79 * author hongliang.dinghl 80 * DOM生成与解析XML 文档 81 */ 82 public class DomDemo implements XmlDocument 83 84 private Document document; 85 86 private

7、 String fileName; 87 88 public void init() 89 try 90 DocumentBuilderFactory factory = DocumentBuilderFactory 91 .newInstance(); 92 DocumentBuilder builder = factory.newDocumentBuilder(); 93 this.document = builder.newDocument(); 94 catch (ParserConfigurationException e) 9596 97 98 99 public void cre

8、ateXml(String fileName) 100 101 Element root = this.document.createElement(“employees”); 102 this.document.appendChild(root); 103 Element employee = this.document.createElement(“employee”); 104 Element name = this.document.createElement(“name”); 105 name.appendChild(this.document.createTextNode(“丁宏亮

9、 “); 106 employee.appendChild(name); 107 Element sex = this.document.createElement(“sex”); 108 sex.appendChild(this.document.createTextNode(“m”); 109 employee.appendChild(sex); 110 Element age = this.document.createElement(“age”); 111 age.appendChild(this.document.createTextNode(“30); 112 employee.a

10、ppendChild(age); 113 root.appendChild(employee); 114 115 TransformerFactory tf = TransformerFactory.newInstance(); 116 try 117 Transformer transformer = tf.newTransformer(); 118 DOMSource source = new DOMSource(document); 119 transformer.setOutputProperty(OutputKeys.ENCODING, “gb2312); 120 transform

11、er.setOutputProperty(OutputKeys.INDENT, “yes”); 121 PrintWriter pw = new PrintWriter(new FileOutputStream(fileName); 122 StreamResult result = new StreamResult(pw); 123 transformer.transform(source, result); 124125 catch (TransformerConfigurationException e) 126 127128 catch (IllegalArgumentExceptio

12、n e) 129 130131 catch (FileNotFoundException e) 132 133134 catch (TransformerException e) 135 136137 138 139 140 解析141 public void parserXml(String fileName) 142 try 143 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 144 DocumentBuilder db = dbf.newDocumentBuilder(); 145 Document

13、 document = db.parse(fileName); 146 NodeList employees = document.getChildNodes(); 147 for (int i = 0; i employees.getLength(); i+) 148 Node employee = employees.item(i); 149 NodeList employeeInfo = employee.getChildNodes(); 150 for (int j = 0; j employeeInfo.getLength(); j+) 151 Node node = employe

14、eInfo.item(j); 152 NodeList employeeMeta = node.getChildNodes(); 153 for (int k = 0; k 0) 262 263 this.attributes = attributes; 264 265 this.hasAttribute = true; 266 267 268 269 270 271 public void endElement(String uri, String localName, String qName) 272 273 throws SAXException 274 275 if (hasAttr

15、ibute & (attributes != null) 276 277 for (int i = 0; i attributes.getLength(); i+) 278 279280 + attributes.getValue(0); 281 282 283 284 285 286 287 288 public void characters(char ch, int start, int length) 289 290 throws SAXException 291 292 new String(ch, start, length); 293 294 295 296 3. DOM4J生成

16、和解析XML文档 DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。297 view plaincopy to clipboardprint? 298 package299 import300 import301 import302 import303 import304 import305 import306 import307 import308 import309 i

17、mport310 /* 311 * 312 * author hongliang.dinghl 313 * Dom4j 生成XML文档与解析XML文档 314 */ 315 public class Dom4jDemo implements XmlDocument 316 317 public void createXml(String fileName) 318 Document document = DocumentHelper.createDocument(); 319 Element employees=document.addElement(“employees”); 320 Ele

18、ment employee=employees.addElement(“employee”); 321 Element name= employee.addElement(“name”); 322 name.setText(“ddvip”); 323 Element sex=employee.addElement(“sex”); 324 sex.setText(“m”); 325 Element age=employee.addElement(“age”); 326 age.setText(“29); 327 try 328 Writer fileWriter=new FileWriter(f

19、ileName); 329 XMLWriter xmlWriter=new XMLWriter(fileWriter); 330 xmlWriter.write(document); 331 xmlWriter.close(); 332 catch (IOException e) 333 334 ); 335 336 337 338 339 340 341 public void parserXml(String fileName) 342 File inputXml=new File(fileName); 343 SAXReader saxReader = new SAXReader();

20、344 try 345 Document document = saxReader.read(inputXml); 346 Element employees=document.getRootElement(); 347 for(Iterator i = employees.elementIterator(); i.hasNext();) 348 Element employee = (Element) i.next(); 349 for(Iterator j = employee.elementIterator(); j.hasNext();) 350 Element node=(Eleme

21、nt) j.next(); 351352 353 354 355 catch (DocumentException e) 356357 358359 360 361 362 4. JDOM生成和解析XML 为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。363 view plaincopy to clipboardprint? 364 package365 import366 import367 import368 import369 impor

22、t370 import371 import372 import373 import374 /* 375 * 376 * author hongliang.dinghl 377 * JDOM 生成与解析XML文档 378 * 379 */ 380 public class JDomDemo implements XmlDocument 381 382 public void createXml(String fileName) 383 Document document; 384 Element root; 385 root=new Element(“employees”); 386 docum

23、ent=new Document(root); 387 Element employee=new Element(“employee”); 388 root.addContent(employee); 389 Element name=new Element(“name”); 390 name.setText(“ddvip”); 391 employee.addContent(name); 392 Element sex=new Element(“sex”); 393 sex.setText(“m”); 394 employee.addContent(sex); 395 Element age=new Element(“age”); 396 age.setText(“23); 397 employee.addContent(age); 398 XMLOutputter XMLOut = new XML

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论