前面已经了解了DOM和SAX两种解析方式,通过对比知道了DOM解析的核心是建立树模型,而SAX解析的核心是通过回调机制来实现。本篇文章将继续带大家用一种更为强大更为简单的工具来解析XML数据。我这里给大家提供的是simple-xml-2.7.1,已上传至附件,下载解压后把该文件夹下的jar文件夹的包导入到Eclipse中就可。关于将第三方包导入Eclipse项目中方法,我这里就不再赘述了,网上有很多教程。我们的重点是如何利用它去解析XML文件。
simple-xml的解析和创建XML的方式是以注解为基础。这里我们先将怎么使用它创建XML,然后再读取并解析这个创建的XML文件。
假设我们现在需要创建一个p.xml的文件,效果如下:
<persons> <person> <name>jack</name> <phone>186</phone> <phone>139</phone> <phone>150</phone> </person> <person> <name>rose</name> <phone>131</phone> </person> <person> <name>tom</name> </person> </persons>
同样我们需要创建一个与该XML文件对应的模型类,相比大家都知道应该是Person.java了。
但是,仔细观察这个xml文件可以发现与我们之前的XML文档都不一样,之前的每个类中的子标签是固定的,而这里<person>标签下的子标签除了<name>外,<phone>的数量并不唯一。这个时候我们要怎么设置这个Person类的字段呢?其实很简单,因为<phone>标签是不唯一且不确定的,所以我们可以将其放在一个列表(如ArrayList)里面,并且,使用simple-xml处理类中的对象字段也是非常好用的。那么我们首先来创建一个Person类吧
一、创建一个与XML文件对应的模型类——Person.java
@Root public class Person { /** * 姓名 */ @Element private String name; /** * 电话号码 */ @ElementList(inline = true, entry = "phone", required = false) private List<String> phones; /** * */ public Person() { phones = new ArrayList<>(); } /** * @param name * @param phones */ public Person(String name) { this(); this.name = name; } /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the phones */ public List<String> getPhones() { return phones; } /** * @param phones * the phones to set */ public void setPhones(List<String> phones) { this.phones = phones; } /** * 新增一个电话号码 * * @param phone */ public void addPhone(String phone) { phones.add(phone); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { return "Person [" + (name != null ? "name=" + name + ", " : "") + (phones != null ? "phones=" + phones : "") + "]"; } }
仔细观察Person.java中的代码可以发现,类上面加了一个@Root,字段上面加了@Element两个注解,并且对于列表字段,还为其注解设置了三个属性,inline表示是否内联(待会我会将其设置为false给大家看下运行效果截图),entry表示每个子元素的标签名字,required表示是否为必须标签,很显然,上面的XML文档中最后一个没有phone,所以不是必须标签。
(注意:如果没有引入simple-xml.jar包的话,@Root和@Element会报错)
二、除了person标签外,我们看到需要的xml文件中还有一个外层标签<persons>,所以我们还需要创建一个用来包装Person类列表的包装类,取名为PersonList.java,如下:
@Root(name = "persons") public class PersonList { @ElementList(inline = true) private List<Person> list; public PersonList() { list = new ArrayList<>(); } public void add(Person p) { list.add(p); } public List<Person> getList() { return list; } }
三、创建一个测试类,创建文章开始要创建的p.xml文件。如下:
public class Test { public static void main(String[] args) { Person p1 = new Person("jack"); p1.addPhone("186"); p1.addPhone("139"); p1.addPhone("150"); Person p2 = new Person("rose"); p2.addPhone("131"); Person p3 = new Person("tom"); PersonList personList = new PersonList(); personList.add(p1); personList.add(p2); personList.add(p3); // 创建一个传送器对象,使用这个对象可以很快的创建和解析XML文档 Persister persister = new Persister(); try { // 将Person列表直接写出 persister.write(personList, new File("p.xml")); } catch (Exception e) { e.printStackTrace(); } } }
四、创建的运行效果
(一)大家运行看下,可以得到和文章开始给出的p.xml一样的文档。
(二)中间我们说了inline这个属性,刚刚我们是让其为true,显示让其为false,可以看看运行效果,如下:
<persons> <person> <name>jack</name> <phones class="java.util.ArrayList"> <phone>186</phone> <phone>139</phone> <phone>150</phone> </phones> </person> <person> <name>rose</name> <phones class="java.util.ArrayList"> <phone>131</phone> </phones> </person> <person> <name>tom</name> <phones class="java.util.ArrayList"/> </person> </persons>
可以看到当inline为false时,表示该列表不内嵌,而是要单独做一个标签,而列表中的元素是这个标签的自标签,对于正个XML文档而言,inline为true时,phone是第三级标签,而为false时变成了第四季标签。这就是inline这个属性。
五、解析刚刚创建的p.xml文件
public class PersonRead { public static void main(String[] args) { File f = new File("p2.xml"); try { // 创建一个传输器,执行其read方法,可以直接获取到 PersonList pList = new Persister().read(PersonList.class, f); List<Person> list = pList.getList(); // 打印输出获得的xml文件信息 for (Person person : list) { System.out.println(person); } } catch (Exception e) { e.printStackTrace(); } } }
六、读取的运行结果
可以看到phone不是必须的也可以成功读取。
之后会更新一篇解析json数据的文章。
谢谢您的关注和阅读,文章不当之处还请您不吝赐教~~~
相关推荐
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、...总之,Xerces-J-bin.2.9.1是一个强大的XML解析库,提供丰富的功能和优秀的性能,是Java开发者处理XML文档的重要工具。
本教程将带你逐步了解如何使用Java解析XML文件。 首先,我们需要明白XML的基本结构。XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)和注释(Comment)组成。在给定的XML示例中,`...
《简单实用:XML与对象之间的转换工具——simple-xml2object-1.0.0》 在信息技术领域,数据交换和存储的方式多种多样,其中XML(eXtensible Markup Language)因其结构化、可扩展性及跨平台特性,被广泛用于数据...
Java解析XML的包——Xerces.jar是Java开发中用于处理XML文档的重要工具。XML(eXtensible Markup Language)是一种结构化数据表示语言,广泛应用于数据交换、配置存储和文档处理等领域。Xerces.jar包含了Apache ...
本文将深入探讨XML解析的基本概念、常用方法以及相关的Java库——JDOM。 XML文档由一系列元素构成,每个元素都包含标签、属性和内容。解析XML的过程就是识别这些元素,提取所需信息,并将其转化为内存中的数据结构...
在Java编程中,XML(可扩展标记语言)是一种常见的数据交换格式,用于存储和传输结构化数据。在给定的代码段中,我们看到一个名为`AnalyzeAndBuildXml`的类,它包含了一个用于解析特定格式XML的方法——`analysisXml...
XML解析是将XML文档转换为应用程序可以处理的数据的过程。本篇文章将重点讨论Android中的SAX(Simple API for XML)解析器,这是一种事件驱动的解析方法,适合处理大文件或内存有限的设备。 ### SAX解析原理 SAX...
SAX解析XML的基本流程是:创建SAXParserFactory,通过该工厂实例化SAXParser,然后设置事件处理器(ContentHandler),最后解析XML文档。以下是SAX解析的关键步骤: - 首先,通过`SAXParserFactory.newInstance()`...
通过对Java解析XML的四种方法——DOM、SAX、StAX和JDOM的介绍,我们可以看到每种方法都有其适用的场景。在实际应用中,根据具体的项目需求和资源限制,选择合适的解析方式是非常重要的。希望本文能够帮助开发者更好...
本篇文章将深入探讨Java解析XML的几种主要方法,以及相关的知识点。 首先,Java提供了两种主要的API来解析XML:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器将整个XML文档加载到内存中,...
本篇文章将深入探讨四种主要的XML解析技术——DOM、SAX、StAX以及JAXB,并进行详细的分析与对比。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一个树形结构,即DOM树。这种解析方式...
总结来说,Android中解析XML时,DOM适用于小型且需要频繁访问的文件,SAX和Pull解析适合大型文件或资源有限的环境。选择哪种解析方式取决于具体应用场景和性能需求。理解并熟练掌握这三种解析方式,将有助于提升...
Java与XML的交互是开发中常见的一种数据处理方式,特别是在需要处理结构化数据时。DOM(Document Object Model)是一种在Java中处理XML的标准方法,它将XML文档转换为一棵对象树,使得我们可以方便地访问和修改XML...
Dom方式创建与解析XML文档是一种使用编程语言,如Java,在Android平台实现的方式。这种方式利用了DOM(文档对象模型)的API,其中JAXP(Java API for XML Processing)提供的DocumentBuilder类是用来创建和解析XML...
《简易示例——深入解析"simple-demo.rar"》 在我们面前的是一个名为"simple-demo.rar"的压缩包文件,它被标记为"123",这可能代表了某种特定的分类或版本号。虽然标签信息较为简洁,但我们可以通过解压这个文件来...
本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...
在Android项目中,我们通常需要以下步骤来使用SAX解析XML: 1. 创建一个继承自`DefaultHandler`的类,比如我们可以命名为`MySAXHandler`。在这个类中,我们需要重写`startElement`、`endElement`和`characters`方法...
Dubbo作为一款高性能、轻量级的Java RPC框架,提供了强大的服务治理能力,其中包括服务监控功能。本文将深入探讨Dubbo的监控组件——dubbo-monitor-simple,主要基于3.0.0-SNAPSHOT版本,以帮助开发者更好地理解和...
三、XML解析与处理 1. DOM(Document Object Model):DOM将XML文档解析为一棵树形结构,通过编程语言访问和操作节点,实现数据的读取和修改。 2. SAX(Simple API for XML):SAX是一种基于事件驱动的解析方式,...