题目:这里有一份XML文件用于储存商品信息,编写一个商品管理系统,可以对XML文件进行增删查改的操作。
<?xml version="1.0" encoding="UTF-8"?>
<GamerInfo>
<Brand name="索尼">
<Type name="PSV" price="2000"/>
<Type name="PS4" price="3500"/>
<Type name="PS5" price="4800"/>
</Brand>
<Brand name="任天堂">
<Type name="Switch" price="2100"/>
</Brand>
<Brand name="世嘉">
<type name="土星" price="3000"/>
<type name="海王星" price="Unknown"/>
</Brand>
<Brand name="苹果">
<type name="菠萝" price="200"/>
<type name="香蕉" price="180"/>
</Brand>
</GamerInfo>
一、商品管理系统的功能分析
由题目我们可以知道,增删查改四个功能是需要的功能,此外,我们也要考虑XML文件的读取展示、以及操作后的内容保存功能。
二、商品管理系统的功能实现
(1)读取XML文件内容
1.利用Document类的对象来储存XML文件信息
首先,我们先创建一个GamerBoy类来进行操作。然后,给GamerBoy类一个Document类属性,用来存储获取的XML信息。然后,写一个方法,获取XML文件内容,并存储到Document类的对象中去。
public class GameBoy {
//创建Document类的document对象来储存XML信息
Document document = null;
//用Document类的对象来获取并存储XML文件信息
public void getDocument() {
//创建SAXReader类的对象来读取XML文件信息
SAXReader saxReader = new SAXReader();
try {
//用SAXReader的read方法,将XML信息储存到document对象中
this.document = saxReader.read("src/main/java/JsonPractice/Gamers.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
2.遍历XML文件中的各个节点,将信息打印
第一步,读取Document类的document对象,获取其中的XML信息。第二步,逐级遍历子节点,访问子节点的属性,并输出打印。
public void showInfo() {
//获取根节点,并储存到Element类的对象中去
Element root = document.getRootElement();
//遍历根节点下的Brand子节点
Iterator brandIterator = root.elementIterator();
while (brandIterator.hasNext()) {
//获取当前遍历到的Brand子节点
Element brand = (Element) brandIterator.next();
//用attributeValue()方法获得指定属性并输出
System.out.println(brand.attributeValue("name") + ":");
//遍历Brand节点下的Type子节点
Iterator typeIterator = brand.elementIterator();
while (typeIterator.hasNext()) {
//获得当前遍历到的Type子节点
Element type = (Element) typeIterator.next();
//打印输出信息
System.out.println("机型:" + type.attributeValue("name") + "\t价格:" + type.attributeValue("price"));
}
}
}
(2)保存XML信息,输出为XML文件
先创建OutFormat类的对象保存要输出的XML信息,接着创建XMLWriter对象保存输出XML文件的路径和XML信息,最后调用wirte方法输出XML文件。
//将信息保存至XML文件的方法
public void saveXML(String path) {
//创建OutputFormat类的对象来储存XML信息
OutputFormat format = OutputFormat.createCompactFormat();
try {
//创建XMLWriter类的对象,来储存输出的XMl文件路径和要输出的XML信息
XMLWriter writer = new XMLWriter(new FileWriter(path), format);
//调用XMLWriter类的write方法,来输出储存XML信息的文件
writer.write(document);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
(3)删除操作的实现
关于增加输出操作,我在上一篇文章中由详细表述,这里就跳过。如果不清楚,可以通过传送门移步: