使用JDOM简单解析XML获取水果列表
需积分: 7 68 浏览量
更新于2024-09-15
收藏 36KB DOC 举报
在Java项目中,我们需要实现一个简单的XML解析功能,以便从一个名为"Fruits.xml"的附件文件中读取数据并将其存储到自定义的`Fruits`类实例中。`Fruits`类包含五个属性:名称(name)、颜色(color)、省份(provice)、城市(city)、电话(phone)和价格(price)。要求的解析方法应尽可能直观且易于理解。
首先,我们需要创建一个`Fruits`类,该类有对应的getter和setter方法来访问和设置这些属性。代码如下:
```java
package bean;
import java.util.List;
public class Fruits {
private String name;
private String color;
private String province;
private String city;
private String phone;
private double price;
// getters and setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
public String getProvince() { return province; }
public void setProvince(String province) { this.province = province; }
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
// Overridden equals() and hashCode() for better handling during sorting
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Fruits fruits = (Fruits) obj;
return Double.compare(fruits.getPrice(), getPrice()) == 0;
}
@Override
public int hashCode() {
return Objects.hash(name, color, province, city, phone, Double.doubleToLongBits(price));
}
}
```
接下来,我们需要创建一个`ParseXML`接口,它有一个`parseFruitsXMLFile`方法,接收文件路径和文件名作为参数,返回解析后的`Fruits`对象列表:
```java
import java.io.File;
import java.util.List;
public interface ParseXML {
List<Fruits> parseFruitsXMLFile(String filePath, String fileName);
}
```
然后,我们需要实现这个接口,选择JDOM库来进行简单易用的XML解析。JDOM是一个轻量级的Java XML API,适用于处理小型到中型的XML文档。以下是如何使用JDOM解析上述XML内容的示例:
```java
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class JDOMParser implements ParseXML {
private static final SAXBuilder saxBuilder = new SAXBuilder();
@Autowired
public JDOMParser() {}
@Override
public List<Fruits> parseFruitsXMLFile(String filePath, String fileName) {
try {
File xmlFile = new File(filePath + fileName);
Document doc = saxBuilder.build(xmlFile);
Element rootElement = doc.getRootElement();
List<Fruits> fruitsList = new ArrayList<>();
List<Element> fruitElements = rootElement.getChildren("Fruit");
for (Element fruit : fruitElements) {
Fruits fruitBean = new Fruits();
fruitBean.setName(fruit.getChildText("Name"));
fruitBean.setColor(fruit.getChildText("Color"));
fruitBean.setProvince(fruit.getChildText("Address/Provice"));
fruitBean.setCity(fruit.getChildText("Address/City"));
fruitBean.setPhone(fruit.getChildText("Address/Phone"));
double price = Double.parseDouble(fruit.getChildText("Price"));
fruitBean.setPrice(price);
fruitsList.add(fruitBean);
}
// 对Fruits列表进行排序,确保按价格升序排列
Collections.sort(fruitsList);
return fruitsList;
} catch (IOException e) {
throw new RuntimeException("Error parsing XML file", e);
}
}
}
```
在这个实现中,我们首先通过SAXBuilder创建了一个`Document`对象,然后遍历XML文档的`Fruit`元素,根据每个元素的子元素提取`Fruits`对象的属性。最后,我们将这些对象添加到`List`中,并根据价格对列表进行排序,满足题目要求。
这样,通过`JDOMParser`类的`parseFruitsXMLFile`方法,我们可以轻松地将XML文件内容解析成Java对象,并按照价格从低到高打印出`name`和`price`。
2019-04-05 上传
2011-11-30 上传
2004-06-24 上传
2015-05-14 上传
2017-12-17 上传
2020-09-04 上传
2019-01-17 上传
2010-09-07 上传
shr8023whm1314
- 粉丝: 0
- 资源: 2
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍