- 浏览: 26231 次
- 性别:
- 来自: 成都
最新评论
延续XML解析的几种方式(一)的代码格式,我们来写一个用JDOM解析XML的方法,这个方法首先依赖于外部包org.jdom。让我们仔细看看代码,知道他解析XML的简单和效率。
就这么简单,我们就实现了之前很多行代码的XML的解析,根据不要重复造轮子的经验,我们没必要自己再写个什么东西来解析XML,就用现成的JDOM包,两三句代码就搞定一个XML解析了。写入XML快,解析XML更快,痛快吧,童鞋们!
为减少DOM、SAX的编码量,JDOM才出现的;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX。
也许你要说JDOM已经很方便了,但是趁热打铁,让我们再上一段DOM4J的代码
怎样,dom4j是不是又让你眼前一亮菊花一紧? 如此方便的XML解析包。如此简单的代码,几句话将一个XML文件给解析出来。DOM4J的代码,我没有加一句注释,其实不需要注释你也应该很容易看出来每一步在做什么,真实的实现了所见即所得。
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
这里,我还要给大家介绍一种方便的XML解析方法,这种方法更符合面向对象的编码原则,更容易让Java程序员所理解,就是Apache所推出的Digester的解析方式,这种方式需要依赖于commons-digester和commons-collections包。代码如下:
首先我们定义一个Employee类,这个类中的属性就是XML中Employee标签下的字段。这个类很简单,就是个简单的javabean,有getter,setter方法和一个无参构造方法。
然后定义一个Employees类,这个类中只有一个ArrayList成员变量,该成员变量中存储的就是每个Employee对象。我们在代码中也给出了添加对象和获取List中对应Employee的方法,代码如下:
有了这两个对象对应XML的两个主要节点,我们就可以开始写Digester解析代码了
从上面的代码中可以看出,Digester是将XML标签映射成实际的javabean,然后通过他自身的几个简单方法将其封装成一定结构的树来解析的。该方法容易被面向对象开发者所理解,但是如果XML过于复杂的话,会产生很多映射对象,开销也相应的增大了。
注意: 以上几段代码中(除了Digester)都出现过Element,Document等等字段,我们使用DOM的时候就需要引入DOM包下面的这些字段,使用JDOM的时候需要引入JDOM包下面的这些字段,使用DOM4J的时候引入的应该是DOM4J包下面的这些字段,不要引入错误,导致编译都通不过哟。
最后,同样贴出测试代码
最后附上XML解析需要用到的包,大家可以尝试一下方便的解析了!
public class ExecuteXMLwithJDOM implements XMLExecutor { //JDOM创建XML public void createXML(String fileName) { Document document; Element root; root = new Element("employees"); document = new Document(root); Element employee1 = new Element("employee"); root.addContent(employee1); Element name1 = new Element("name"); name1.setText("tangsir"); employee1.addContent(name1); Element sex1 = new Element("sex"); sex1.setText("m"); employee1.addContent(sex1); Element age1 = new Element("age"); age1.setText("31"); employee1.addContent(age1); Element employee2 = new Element("employee"); root.addContent(employee2); Element name2 = new Element("name"); name2.setText("tangsir"); employee2.addContent(name2); Element sex2 = new Element("sex"); sex2.setText("m"); employee2.addContent(sex2); Element age2 = new Element("age"); age2.setText("31"); employee2.addContent(age2); XMLOutputter XMLOut = new XMLOutputter(); try { XMLOut.output(document, new FileOutputStream(fileName)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //JDOM解析XML public void parseXML(String fileName) { SAXBuilder sb = new SAXBuilder(); Document doc; Element root = null; try { doc = sb.build(fileName); // 获取XML根节点,这里的根节点是employees root = doc.getRootElement(); } catch (JDOMException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } // 获取根节点的一级子节点列表 List list = root.getChildren("employee"); for (int i = 0; i < list.size(); i++) { Element e = (Element) list.get(i); System.out.println(e.getChild("name") + " = " + e.getChildText("name")); System.out.println(e.getChild("sex") + " = " + e.getChildText("sex")); System.out.println(e.getChild("age") + " = " + e.getChildText("age")); } } }
就这么简单,我们就实现了之前很多行代码的XML的解析,根据不要重复造轮子的经验,我们没必要自己再写个什么东西来解析XML,就用现成的JDOM包,两三句代码就搞定一个XML解析了。写入XML快,解析XML更快,痛快吧,童鞋们!
为减少DOM、SAX的编码量,JDOM才出现的;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX。
也许你要说JDOM已经很方便了,但是趁热打铁,让我们再上一段DOM4J的代码
public class ExecuteXMLwithDOM4J implements XMLExecutor { public void createXML(String fileName) { Document document = DocumentHelper.createDocument(); Element employees = document.addElement("employees"); //add tangsir info into document Element employee1 = employees.addElement("employee"); Element name1 = employee1.addElement("name"); name1.setText("tangsir"); Element sex1 = employee1.addElement("sex"); sex1.setText("m"); Element age1 = employee1.addElement("age"); age1.setText("31"); //add jianqiangsir info into document Element employee2 = employees.addElement("employee"); Element name2 = employee2.addElement("name"); name2.setText("jianqiangsir"); Element sex2 = employee2.addElement("sex"); sex2.setText("fm"); Element age2 = employee2.addElement("age"); age2.setText("30"); try { Writer fileWriter = new FileWriter(fileName); XMLWriter xmlWriter = new XMLWriter(fileWriter); xmlWriter.write(document); xmlWriter.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } public void parseXML(String fileName) { File inputXml = new File(fileName); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(inputXml); Element employees = document.getRootElement(); for (Iterator i = employees.elementIterator(); i.hasNext();) { Element employee = (Element) i.next(); for (Iterator j = employee.elementIterator(); j.hasNext();) { Element node = (Element) j.next(); System.out.println(node.getName() + ":" + node.getText()); } } } catch (DocumentException e) { System.out.println(e.getMessage()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("dom4j parserXml"); } }
怎样,dom4j是不是又让你眼前一亮菊花一紧? 如此方便的XML解析包。如此简单的代码,几句话将一个XML文件给解析出来。DOM4J的代码,我没有加一句注释,其实不需要注释你也应该很容易看出来每一步在做什么,真实的实现了所见即所得。
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
这里,我还要给大家介绍一种方便的XML解析方法,这种方法更符合面向对象的编码原则,更容易让Java程序员所理解,就是Apache所推出的Digester的解析方式,这种方式需要依赖于commons-digester和commons-collections包。代码如下:
首先我们定义一个Employee类,这个类中的属性就是XML中Employee标签下的字段。这个类很简单,就是个简单的javabean,有getter,setter方法和一个无参构造方法。
public class Employee { private String name; private String sex; private int age; public Employee() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
然后定义一个Employees类,这个类中只有一个ArrayList成员变量,该成员变量中存储的就是每个Employee对象。我们在代码中也给出了添加对象和获取List中对应Employee的方法,代码如下:
public class Employees { private ArrayList elist; public Employees(){ elist = new ArrayList(); } public void addEmployee(Employee stu){ elist.add(stu); } public Employee getEmployee(int i){ return (Employee) elist.get(i); } }in
有了这两个对象对应XML的两个主要节点,我们就可以开始写Digester解析代码了
public class ParseXMLwithDigester { public void parseXML(String fileName) { Digester digester = new Digester(); digester.addObjectCreate("employees", Employees.class); digester.addObjectCreate("employees/employee", Employee.class); digester.addBeanPropertySetter("employees/employee/name","name"); digester.addBeanPropertySetter("employees/employee/sex","sex"); digester.addBeanPropertySetter("employees/employee/age","age"); digester.addSetNext("employees/employee", "addEmployee"); try { Employees employs = (Employees) digester.parse(new File(fileName)); Employee emp = employs.getEmployee(0); System.out.println(emp.getName()+ ""+ emp.getSex()+""+ emp.getAge()); Employee emp2 = employs.getEmployee(1); System.out.println(emp2.getName()+ ""+ emp2.getSex()+""+ emp2.getAge()); }catch(Exception e){ e.printStackTrace(); } } }
从上面的代码中可以看出,Digester是将XML标签映射成实际的javabean,然后通过他自身的几个简单方法将其封装成一定结构的树来解析的。该方法容易被面向对象开发者所理解,但是如果XML过于复杂的话,会产生很多映射对象,开销也相应的增大了。
注意: 以上几段代码中(除了Digester)都出现过Element,Document等等字段,我们使用DOM的时候就需要引入DOM包下面的这些字段,使用JDOM的时候需要引入JDOM包下面的这些字段,使用DOM4J的时候引入的应该是DOM4J包下面的这些字段,不要引入错误,导致编译都通不过哟。
最后,同样贴出测试代码
public static void main(String[] args) { //JDOM解析XML测试 ExecuteXMLwithJDOM jdom = new ExecuteXMLwithJDOM(); jdom.createXML("C:\\gggg.xml"); jdom.parseXML("C:\\gggg.xml"); //DOM4J解析MXL测试 ExecuteXMLwithDOM4J dom4j = new ExecuteXMLwithDOM4J(); dom4j.createXML("C:\\xxxx.xml"); dom4j.parseXML("C:\\xxxx.xml"); //Digester解析XML测试 ParseXMLwithDigester digs = new ParseXMLwithDigester(); digs.parseXML("C:\\xxxx.xml"); } }
最后附上XML解析需要用到的包,大家可以尝试一下方便的解析了!
- jdom.jar (147.5 KB)
- 下载次数: 1
- dom4j.jar (475.1 KB)
- 下载次数: 1
- commons-digester.jar (164.5 KB)
- 下载次数: 1
- commons-collections.jar (546.3 KB)
- 下载次数: 1
发表评论
-
SpringMVC DispatcherServlet中使用的特殊Bean
2014-04-11 15:52 966看了开涛博客 ... -
Spring中的代理模式 AOP XML实现方法
2014-03-20 00:21 1068前面跟大家描述了一下我们Spring中使用An ... -
Spring中的代理模式 AOP Annotation实现方法
2014-03-19 23:51 2213之前我们有讲过代理模式和动态代理,其实在Spr ... -
浅谈设计模式2 -- 代理模式
2014-03-18 01:49 600说到代理模式,我想从字面意思,应该是最容易理解 ... -
Spring 的配置
2014-03-17 23:46 6261.Web项目引入Spring的方式。(web ... -
XML 解析(一) 原始的DOM和SAX解析(用于理解解析原理)
2014-03-13 00:54 1173我们今天的话题是XML的解析。现在做项目很多时 ... -
浅谈设计模式1 -- 责任链模式
2014-03-11 01:30 1132设计模式之责任链模式,在Gof的《设计模式》巨 ... -
Servlet的HttpServletResponse对象
2014-03-08 00:33 2985我们之前说到过, Web服务器收到一个http ... -
Servlet的一些内置对象和配置参数
2014-03-05 00:14 8501.Servlet的内置对象和JSP的内置对象。 ... -
老生常谈 Servlet的一些基本知识
2014-03-04 23:45 505Java Web开发,我们在这里谈到一个简单的 ... -
关于Spring3.x + MyBatis 3.x架构的一点经验
2012-11-12 11:01 1310该文章仅为记录自己第一次构建Spring3.x 和 MyBat ...
相关推荐
此外,虽然 Digester 提供了一种方便的方式来映射 XML 到 Java 对象,但它的灵活性和可维护性相比现代的 XML 解析技术(如 JAXB、JDOM、DOM4J 或 Stax)可能会稍逊一筹。在大型项目中,更推荐使用这些现代库来处理 ...
然而,Digester是基于规则的解析器,它结合了DOM和SAX的优点,允许开发者通过定义匹配规则将XML元素映射到Java对象的属性或方法。 2. **Apache Commons Digester库** Digester库的核心概念是规则(Rules),这些...
在描述中提到了一个用于操作XML的jar包,这可能是指如JDOM、DOM4J、Apache Commons Digester或Woodstox等第三方库。这些库提供了更高级别的抽象,使得XML操作更加便捷。例如,JDOM和DOM4J是对DOM API的简化和增强,...
要实现XML到Map的转换,我们可以使用Java的标准库JAXB(Java Architecture for XML Binding)或者第三方库如DOM4J、JDOM、Apache Commons Digester等。这里我们主要讨论使用JAXB的方法,因为它是Java平台的一部分,...
- DOM4J:一个流行的Java XML库,提供了丰富的API,支持XML解析、创建和修改,以及XPath查询。 4. XML序列化 - 将Java对象转换为XML的过程称为序列化。JAXB提供了`unmarshal` 方法将XML反序列化为Java对象,反之...
XML和JavaBean相互转化是一个非常有用的工作,用来读写xml的组件很多,比如dom4j, sax, JDom,Digester等,但是很多组件用起来很麻烦,今天给大家推荐一个超级简单的组件JOX, JOX是一套用户XML document和Java ...
7. **DOM4J** 和 **JDOM**:这两个是Java社区开发的第三方XML库,提供了比Java标准库更友好的API。它们支持DOM、SAX和StAX,并且提供了额外的功能,如XPath查询和XML编写。 8. **Woodstox** 和 **Aalto-XML**:这两...
- DOM4J:提供了比JDOM更丰富的功能,如XPath查询。 3. XML Schema(XSD)与DTD(文档类型定义): - XSD用于定义XML文档的结构和数据类型,支持复杂的数据模型。 - DTD更简单,但不支持数据类型,适用于简单的...
- DOM4J:提供了更简洁的API来处理XML,支持DOM、SAX和StAX。 - JDOM:专为Java设计的DOM实现,简化了API。 - Apache Commons Digester:用于将XML输入映射到Java对象。 10. **XML的安全性** - 为了避免XML注入...
在Java中,处理XML文件有多种方式,包括SAX(Simple API for XML)、DOM(Document Object Model)和DOM4J、JAXB(Java Architecture for XML Binding)等。SAX是事件驱动的解析器,适用于大文件,因为它只需要一次...
5. **dom4j**:DOM4J是一个Java的XML API,提供了DOM、SAX和JDOM等多种处理XML的方式,并且支持XPath查询。 6. **xpp3**:XPP3是XML Pull解析器的版本3,它是轻量级的XML解析器,适用于处理大量XML数据的场景。 7....
Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 ...
4. **wsdl4j**:这是一个用于处理WSDL(Web Services Description Language)文档的Java库。它提供了读取、写入和操作WSDL文件的能力,是开发和调试Web服务的重要工具。 5. **.locks**:这个目录可能包含了Maven...
Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 ...
5. **XML解析库**:如jaxen-x.x.x.jar和dom4j-x.x.x.jar,用于解析XML文档。Ireport在处理报表模板时,可能会涉及到XML的读写和操作,这些库起到了关键作用。 6. **iText**:iText-x.x.x.jar是用于PDF生成的库,它...
2. **SAX(简单API for XML)解析**:与DOM不同,SAX是事件驱动的解析器,逐行读取XML文件,只处理需要的部分,适合处理大型XML文件。 3. **JAXB(Java Architecture for XML Binding)**:用于在Java对象和XML之间...
5. **jdom.jar**:Java DOM(Document Object Model)库用于解析和操作XML文档。在JXSL中,可能需要使用JDOM来处理输入的数据源,以便转换成Excel格式。 6. **commons-jexl-1.0.jar**:Apache Commons JEXL(Java ...