使用JDOM简单解析XML获取水果列表

需积分: 7 0 下载量 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`。